<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## OAuth 2.0 - OAuth 的核心就是向第三方應用頒發令牌 - OAuth 2.0 規定了四種獲得令牌的流程。你可以選擇最適合自己的那一種,向第三方應用頒發令牌 - client_id和client_secret 通過在第三方平臺注冊獲取 ## 四種授權方式 ### 授權碼(authorization-code) - 指的是第三方應用先申請一個授權碼,然后再用該碼獲取令牌 - 這種方式是最常用的流程,安全性也最高 1. 第一步:A 網站提供一個鏈接,用于跳轉到B網站 ``` https://b.com/oauth/authorize? response_type=code& client_id=CLIENT_ID& redirect_uri=CALLBACK_URL& scope=read 參數說明: response_type 參數表示要求返回授權碼(code) client_id 參數讓 B 知道是誰在請求 redirect_uri 參數是 B 接受或拒絕請求后的跳轉網址 scope 參數表示要求的授權范圍(這里是只讀) ``` 2. 第二步,用戶跳轉后,B 網站會要求用戶登錄,然后詢問是否同意給予 A 網站授權。用戶表示同意,這時 B 網站就會跳回redirect_uri參數指定的網址。跳轉時,會傳回一個授權碼 ``` https://a.com/callback?code=AUTHORIZATION_CODE 參數說明: code參數就是授權碼 ``` 3. 第三步,A 網站拿到授權碼以后,就可以在后端,向 B 網站請求令牌 ``` https://b.com/oauth/token? client_id=CLIENT_ID& client_secret=CLIENT_SECRET& grant_type=authorization_code& code=AUTHORIZATION_CODE& redirect_uri=CALLBACK_URL 參數說明: client_id參數和client_secret 參數用來讓 B 確認 A 的身份(client_secret參數是保密的,因此只能在后端發請求), grant_type 參數的值是AUTHORIZATION_CODE,表示采用的授權方式是授權碼 code 參數是上一步拿到的授權碼, redirect_uri 參數是令牌頒發后的回調網址 ``` 4. 第四步,B 網站收到請求以后,就會頒發令牌。具體做法是向redirect_uri指定的網址 ``` { "access_token":"ACCESS_TOKEN", "token_type":"bearer", "expires_in":2592000, "refresh_token":"REFRESH_TOKEN", "scope":"read", "uid":100101, "info":{...} } 參數說明: access_token 字段就是令牌,A 網站在后端拿到了 refresh_token 此token 適用于令牌過期是時,更新令牌的touken,詳見令牌更新 ``` ### 隱藏式 - 有些 Web 應用是純前端應用,沒有后端,必須將令牌儲存在前端 - 允許直接向前端頒發令牌。這種方式沒有授權碼這個中間步驟 1. 第一步,A 網站提供一個鏈接,要求用戶跳轉到 B 網站,授權用戶數據給 A 網站使用 ``` https://b.com/oauth/authorize? response_type=token& client_id=CLIENT_ID& redirect_uri=CALLBACK_URL& scope=read 參數說明: response_type參數為token,表示要求直接返回令牌 ``` 2. 第二步,用戶跳轉到 B 網站,登錄后同意給予 A 網站授權。這時,B 網站就會跳回redirect_uri參數指定的跳轉網址,并且把令牌作為 URL 參數,傳給 A 網站 ``` https://a.com/callback#token=ACCESS_TOKEN ``` > 這種方式把令牌直接傳給前端,是很不安全的。因此,只能用于一些安全要求不高的場景,并且令牌的有效期必須非常短,通常就是會話期間(session)有效,瀏覽器關掉,令牌就失效了 ### 密碼式 - 如果你高度信任某個應用,也允許用戶把用戶名和密碼,直接告訴該應用。該應用就使用你的密碼,申請令牌,這種方式稱為"密碼式"(password)。 1. 第一步,A 網站要求用戶提供 B 網站的用戶名和密碼。拿到以后,A 就直接向 B 請求令牌 ``` https://oauth.b.com/token? grant_type=password& username=USERNAME& password=PASSWORD& client_id=CLIENT_ID 參數說明 grant_type參數是授權方式,password表示"密碼式", username和password是 B 的用戶名和密碼 ``` 2. 第二步,B 網站驗證身份通過后,直接給出令牌。注意,這時不需要跳轉,而是把令牌放在 JSON 數據里面,作為 HTTP 回應,A 因此拿到令牌 ### 憑證式 - 適用于沒有前端的命令行應用,即在命令行下請求令牌 1. 第一步,A 應用在命令行向 B 發出請求 ``` https://oauth.b.com/token? grant_type=client_credentials& client_id=CLIENT_ID& client_secret=CLIENT_SECRET 參數說明 grant_type 參數等于client_credentials表示采用憑證式 client_id和client_secret 用來讓 B 確認 A 的身份 ``` 2. 第二步,B 網站驗證通過以后,直接返回令牌 這種方式給出的令牌,是針對第三方應用的,而不是針對用戶的,即有可能多個用戶共享同一個令牌 ## 令牌 ### 令牌的使用 A 網站拿到令牌以后,就可以向 B 網站的 API 請求數據了 每個發到 API 的請求,在請求的頭信息,加上一個Authorization字段 ``` curl -H "Authorization: Bearer ACCESS_TOKEN" "https://api.b.com" 參數說明 ACCESS_TOKEN 就是拿到的令牌 ``` ### 更新令牌 - 令牌過期時,如果每次都重新獲取令牌,體驗并不好 - 頒發令牌的時候,一次性頒發兩個令牌,一個用于獲取數據,一個用于獲取數據,另一個用于獲取新的令牌(refresh token 字段) ``` https://b.com/oauth/token? grant_type=refresh_token& client_id=CLIENT_ID& client_secret=CLIENT_SECRET& refresh_token=REFRESH_TOKEN 參數說明 grant_type 參數為refresh_token表示要求更新令牌 client_id 參數和client_secret參數用于確認身份 refresh_token 參數就是用于更新令牌的令牌 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看