[Go]OAuth2.0

閱讀時間約 9 分鐘

授權碼模式連線流程

  1. 用戶端請求自己的伺服器。
  2. 伺服器發現用戶沒登入,就導向認證伺服器。
  3. 認證伺服器顯示授權頁面,等待用戶授權。
  4. 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。
  5. 用戶獲取授權碼。
  6. 用戶將授權碼傳給伺服器。
  7. 伺服器拿授權碼向認證伺服器取得token。


應用註冊

到第三方網站進行登記,讓第三方知道是誰在請求。


HTML

登入

<!DOCTYPE HTML>
<html>
<body>
<a href="OAuth_URL?client_id=your_client_id&redirect_uri=your_redirect_uri">
Login by OAuth_URL
</a>
</body>
</html>


登入成功

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, INItial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Hello</title>
</head>
<body>
</body>
<script>
//取得url參數
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return (false);
}
//獲取access_token
const token = getQueryVariable("access_token");
//呼叫用戶資訊介面
fetch('OAuth_URL_api', {
headers: {
Authorization: 'token ' + token
}
})
//解析請求的JSON
.then(res => res.json())
.then(res => {
//返回用戶資訊
const nameNode = document.createTextNode(`Hi, ${res.name}, Welcome to login our site by OAuth!`)
document.body.appendChild(nameNode)
})
</script>
</html>


Go

package main

import (
"encoding/json"
"fmt"
"html/template"
"net/http"
"os"
)

const clientID = "your_client_id"
const clientSecret = "your_client_secret"

func hello(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
t, _ := template.ParseFiles("your_login_suceesfully_html")
t.Execute(w, nil)
}
}

func login(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
t, _ := template.ParseFiles("your_login_html")
t.Execute(w, nil)
}
}

func main() {
http.HandleFunc("/your_login", your_login)
http.HandleFunc("/", your_login_suceesfully)
http.HandleFunc("/your_login_suceesfully", your_login_suceesfully)

httpClient := http.Client{}
http.HandleFunc("/oauth/redirect", func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
fmt.Fprintf(os.Stdout, "could not parse query: %v", err)
w.WriteHeader(http.StatusBadRequest)
}
code := r.FormValue("code")

reqURL := fmt.Sprintf("your_OAuth_access_token?" +
"client_id=%s&client_secret=%s&code=%s", clientID, clientSecret, code)
req, err := http.NewRequest(http.MethodPost, reqURL, nil)
if err != nil {
fmt.Fprintf(os.Stdout, "could not create HTTP request: %v", err)
w.WriteHeader(http.StatusBadRequest)
}
req.Header.Set("accept", "application/json")

res, err := httpClient.Do(req)
if err != nil {
fmt.Fprintf(os.Stdout, "could not send HTTP request: %v", err)
w.WriteHeader(http.StatusInternalServerError)
}
defer res.Body.Close()

var t AccessTokenResponse
if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
fmt.Fprintf(os.Stdout, "could not parse JSON response: %v", err)
w.WriteHeader(http.StatusBadRequest)
}

w.Header().Set("Location", "/your_login_suceesfully_html?access_token="+t.AccessToken)
w.WriteHeader(http.StatusFound)
})

http.ListenAndServe(":8087", nil)
}

type AccessTokenResponse struct {
AccessToken string `json:"access_token"`
}

code為用來取得access_token的授權碼。







8會員
112內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
留言0
查看全部
發表第一個留言支持創作者!
小黑與程式的邂逅 的其他內容
[Go][RPC]微服務
閱讀時間約 6 分鐘
[Go]生成CSV
閱讀時間約 4 分鐘
[Go]訊息併發發送
閱讀時間約 1 分鐘
[Go]多通道監聽器
閱讀時間約 2 分鐘
[Go]產生亂數
閱讀時間約 1 分鐘
[Go]網頁爬蟲
閱讀時間約 3 分鐘
你可能也想看
川普當選,對台股是利多還是利空?川普在槍擊事件中所表現出來的英勇形象,讓他贏得美國總統大選幾乎已成定局。沒想到他隨口的一句話「台灣搶走美國的晶片生意,所以要付保護費」,就讓台積電在短短三天跌掉超過100 元,台股也跌掉1100點以上。台積電、台股會就此一路下跌嗎?未來該如何因應?  
Thumbnail
2024-07-20
61
金融科技與生活美學的融合 CUBE App實踐自我理想最近開啟了研究工作,也開始斜槓著手團購、行銷、洽談業務,慢慢想打造一條屬於自己的道路,而工作忙碌之虞,總忘記自己刷卡消費明細、信用卡繳費,還會忽略了最應該的投資理財,也常常在忙碌奔波中忘記信用卡優惠,國泰世華CUBE App給足了這些功能和服務。 日常生活與數位、科技形影不離,同時也拉近彼此距
Thumbnail
2024-07-11
13
GO ! WALLET可免費獲得虛擬貨幣的錢包APP 馬上下載「GO!WALLET」吧! 趁現在利用下列號碼註冊APP,就可300點數喔
2022-02-20
0
Go out less during the pandemic avoidance timGo out less during the pandemic avoidance time frame! Get ready nourishment for hide kids + train to go to the restroom at home   Grasp 1 rule to succ
Thumbnail
2021-07-28
0
"Go Home, Ivy!"一天傍晚和老婆散步經過一家雙語幼兒園,正巧是放學時間,父母們趕忙到園區接兒女回家。此時,聽到園區傳來廣播內容: “Go home, Ivy!” 一位老師透過廣播通知小朋友,意思對應到中文應該是:「爸媽來接你了,回家囉!」我和太太互看一眼後,不但笑了,也覺得很「三條缐」。
GO!GO!GO!繼續快樂過寒假。當一顆種子天天被陽光露水,折磨在潮濕悶熱的土壤裡時,你我不會感到惋惜,因為曉得這是刺激生命更燦爛的關鍵,但倘若你我就是那顆種子,就是正被困住、被壓迫在毫無自由的階段裡,還能相信自己的未來很燦爛嗎? 圖片摘自臉書「家政夫的悄悄話」。 最近因著寒假的緣故,家政夫有機會坐在書桌前,一邊調整三条老師的錄音內
Thumbnail
2020-02-05
2
GO!GO!芬蘭!我的旅行規劃方式是訂好機票跟住宿,列出想去的景點依據交通去安排路線,只要先建構出相關地理位置概念就可以了
Thumbnail
2019-12-15
1
Go Vegan!健康簡單蔬食生活一直以來不敢踏入吃素的行列,雖然知道吃素對世界好處多多,但總覺得身體會處在長期慢性缺乏蛋白質的狀態。但事實上,我才執行兩週,好處之明顯,讓我非常興奮,不得不打在這裡跟大家分享。
Thumbnail
go on 與「繼往走向;繼往開來;繼;續;繼續;接續;启開;正昂;發生」等的轉換密碼完整標題:go on 與「繼往走向」或「繼往開來」及「繼」、「續」、「繼續」、「接續」、「启開」、「正昂」、「發生」等的轉換密碼
Thumbnail
go 與「之;至;至于;到;前往;進往;步往;步;走;行;過;機遇;行旺」等的轉換密碼完整標題:go 與「之」、「至」、「至于」、「到」、「到于」、「前往」、「進往」、「步往」、「走」、「走于」、「走往」、「行」、「行于」、「行往」、「行走」、「去」、「過」、「過去」、「過于」、「步」、「步于」、「步往」、「步行」、「機遇」、「行旺」等的轉換密碼
Thumbnail
go around 與「逛;觀覽;交往;相處;走訪;轉繞圓動」等的轉換密碼及「天狼星」之謎完整標題:go around 與「逛」、「觀覽」、「交往」、「相處」、「走訪」、「轉繞圓動」等的轉換密碼及「天狼星」之謎
Thumbnail
川普當選,對台股是利多還是利空?川普在槍擊事件中所表現出來的英勇形象,讓他贏得美國總統大選幾乎已成定局。沒想到他隨口的一句話「台灣搶走美國的晶片生意,所以要付保護費」,就讓台積電在短短三天跌掉超過100 元,台股也跌掉1100點以上。台積電、台股會就此一路下跌嗎?未來該如何因應?  
Thumbnail
2024-07-20
61
金融科技與生活美學的融合 CUBE App實踐自我理想最近開啟了研究工作,也開始斜槓著手團購、行銷、洽談業務,慢慢想打造一條屬於自己的道路,而工作忙碌之虞,總忘記自己刷卡消費明細、信用卡繳費,還會忽略了最應該的投資理財,也常常在忙碌奔波中忘記信用卡優惠,國泰世華CUBE App給足了這些功能和服務。 日常生活與數位、科技形影不離,同時也拉近彼此距
Thumbnail
2024-07-11
13
GO ! WALLET可免費獲得虛擬貨幣的錢包APP 馬上下載「GO!WALLET」吧! 趁現在利用下列號碼註冊APP,就可300點數喔
2022-02-20
0
Go out less during the pandemic avoidance timGo out less during the pandemic avoidance time frame! Get ready nourishment for hide kids + train to go to the restroom at home   Grasp 1 rule to succ
Thumbnail
2021-07-28
0
"Go Home, Ivy!"一天傍晚和老婆散步經過一家雙語幼兒園,正巧是放學時間,父母們趕忙到園區接兒女回家。此時,聽到園區傳來廣播內容: “Go home, Ivy!” 一位老師透過廣播通知小朋友,意思對應到中文應該是:「爸媽來接你了,回家囉!」我和太太互看一眼後,不但笑了,也覺得很「三條缐」。
GO!GO!GO!繼續快樂過寒假。當一顆種子天天被陽光露水,折磨在潮濕悶熱的土壤裡時,你我不會感到惋惜,因為曉得這是刺激生命更燦爛的關鍵,但倘若你我就是那顆種子,就是正被困住、被壓迫在毫無自由的階段裡,還能相信自己的未來很燦爛嗎? 圖片摘自臉書「家政夫的悄悄話」。 最近因著寒假的緣故,家政夫有機會坐在書桌前,一邊調整三条老師的錄音內
Thumbnail
2020-02-05
2
GO!GO!芬蘭!我的旅行規劃方式是訂好機票跟住宿,列出想去的景點依據交通去安排路線,只要先建構出相關地理位置概念就可以了
Thumbnail
2019-12-15
1
Go Vegan!健康簡單蔬食生活一直以來不敢踏入吃素的行列,雖然知道吃素對世界好處多多,但總覺得身體會處在長期慢性缺乏蛋白質的狀態。但事實上,我才執行兩週,好處之明顯,讓我非常興奮,不得不打在這裡跟大家分享。
Thumbnail
go on 與「繼往走向;繼往開來;繼;續;繼續;接續;启開;正昂;發生」等的轉換密碼完整標題:go on 與「繼往走向」或「繼往開來」及「繼」、「續」、「繼續」、「接續」、「启開」、「正昂」、「發生」等的轉換密碼
Thumbnail
go 與「之;至;至于;到;前往;進往;步往;步;走;行;過;機遇;行旺」等的轉換密碼完整標題:go 與「之」、「至」、「至于」、「到」、「到于」、「前往」、「進往」、「步往」、「走」、「走于」、「走往」、「行」、「行于」、「行往」、「行走」、「去」、「過」、「過去」、「過于」、「步」、「步于」、「步往」、「步行」、「機遇」、「行旺」等的轉換密碼
Thumbnail
go around 與「逛;觀覽;交往;相處;走訪;轉繞圓動」等的轉換密碼及「天狼星」之謎完整標題:go around 與「逛」、「觀覽」、「交往」、「相處」、「走訪」、「轉繞圓動」等的轉換密碼及「天狼星」之謎
Thumbnail