成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用鉤子促進OAth 2.0與OpenID連接

譯文
開發 開發工具 前端
作為開發人員,您一定聽說過OAuth 2.0和OpenID Connect(OIDC)吧?它們是用于向Web應用程序添加身份驗證和授權的兩款強大工具。本文將向您展示如何使用Okta的新型內聯鉤子,將信息傳遞到那些通過OIDC和OAuth獲得的令牌中。

【51CTO.com快譯】作為開發人員,您一定聽說過OAuth 2.0和OpenID Connect(OIDC)吧?它們是用于向Web應用程序添加身份驗證和授權的兩款強大工具。

本文將向您展示如何使用Okta的新型內聯鉤子(請參見:https://developer.okta.com/docs/reference/api/inline-hooks/)將信息傳遞到那些通過OIDC和OAuth獲得的令牌中。

首先,您將在Okta中設置OIDC應用程序,以查看返回的令牌類型。然后,您將配置一個Spring Boot API應用。通過各種API端點,您可以向Okta注冊令牌鉤子,并服務于Okta的令牌patch請求。在操作完成的時候,由于注冊了鉤子,您會發現有效載荷中的令牌。

在和本文一起動手實踐之前,請您事先設置好以下內容:

下面,讓我們再來了解一下OIDC和OAuth的相關概念。

使用OAuth 2.0進行委托授權

讓我們假想一個場景:諸如Yelp(譯者注:美國最大的點評網站)之類的客戶端應用從諸如Google之類的認證服務中請求訪問令牌。您作為資源所有者使用自己的憑據登錄Google,并將您的同意授予Yelp,以便其僅訪問自己的聯系人。因此,Yelp擁有了訪問令牌,可以通過Google的Contacts API請求資源服務器,以獲取您的聯系人信息。在此過程中,Yelp永遠不會看到您的密碼,也永遠不會訪問超出您同意范圍之外的內容。并且,您可以隨時撤回自己的同意。

使用OpenID Connect進行身份識別

在這個同意和授權環節中,您可以注意到它只缺少一樣東西:身份。我們需要引入新的令牌:身份令牌,通過在OAuth 2.0之上的一層--OpenID Connect(OIDC),來驗證用戶的身份信息,并且以JWT(https://developer.okta.com/docs/api/resources/oidc#access-token)格式被編碼到經由密碼簽名的令牌之中。這樣既保證了互操作性,又實現了單點登錄(Single Sign On)。

OAuth、以及OIDC擴展使用各種已定義的流(Flows)來管理客戶端應用、認證服務器、以及資源服務器之間的交互。如下面的流程所示,我們將重點關注瀏覽器中的認證代碼流(Authorization Code Flow):

  1. 為了訪問您的聯系人,Yelp通過一個按鈕來鏈接到您的Google通訊錄上。
  2. 在單擊該按鈕后,您將被重定向到Google處,以使用自己的用戶名和密碼登錄。
  3. Google通過顯示告知您Yelp希望以只讀的方式訪問您的聯系人。
  4. 一旦您點擊同意,Google就會通過瀏覽器使用臨時代碼(稱為授權代碼)重定向回Yelp。
  5. Yelp使用該代碼與Google交換訪問令牌。
  6. 在完成所有的代碼驗證之后,Google會向Yelp頒發功能有限(僅對您的聯系人有只讀的訪問權限)的訪問令牌。
  7. Yelp將訪問令牌提供給Google Contacts API。
  8. Google Contacts API驗證該令牌,如果Yelp的請求與令牌標識的功能相匹配,您的聯系人列表則會被返回給Yelp。

為OIDC和OAuth 2.0設置Okta Org

下面,您將在Okta中創建一個OpenID Connect應用。

在登錄到Okta org后,您可以根據頂層菜單導航至“應用程序”,單擊“添加應用”,單擊標簽為Web的第三個框,然后單擊下一步。

最后單擊完成。

在Heroku上的OIDC

為了執行各種可用的流程,我創建了一個OIDC playground應用。

在登錄到https://okta-oidc-fun.herokuapp.com后,您會看到一個帶有表單和一些切換按鈕的頁面。它默認指向的是我的Okta org。當然,您可以通過如下表格將其更改為自己的Okta org。

通過向下滾動并單擊鏈接,您可以啟動一個新選項卡,并在其中向Okta org進行身份驗證。然后,您將會被重定向回ID令牌和訪問令牌的位置。而通過單擊“驗證ID令牌”,您將可以看到有效載荷已經被編碼到了該令牌之中。

至此,您已經了解了Okta中的OpenID Connect應用是如何生成各種令牌的。下面,我們將討論如何創建一個將自定義聲明添加到ID令牌的鉤子。由于是發生在對ID令牌進行簽名之前,因此您仍然可以安全地對密碼簽名進行驗證。

設置Favorite Beers API

請從GitHub上獲取本例的源代碼--https://github.com/oktadeveloper/okta-token-hooks-example

這是一個Spring Boot類型的應用,它使用Okta Spring Boot Starter,來輕松與OpenID Connect和OAuth 2.0相集成。它使用H2(https://www.h2database.com/html/main.html)內存嵌入式數據庫和Spring Data JPA(https://spring.io/projects/spring-data-jpa)進行簡單的對象關系映射,以及Lombok(https://projectlombok.org/)項目。該應用程序指向您的Favorite Beers API,以及一個用于處理Okta傳入的鉤子請求,并返回ID令牌。

在src/main/resources文件夾中,您將看到application.sample.yml文件。您可以通過復制,由它在同一文件夾中產生application.yml文件。接著根據上述提到的設置,自定義application.yml文件的內容,其中包括:issuer、clientId和clientSecret的值。同時,您也可以將id和password值更改為任何其他值。完成這些設置之后,您可以如下命令運行應用程序:

注意:您需要Java 11或更高的版本,才能運行該示例。如果您使用的是Mac,則建議您使用SDKMAN(https://sdkman.io/),來管理Java版本。

操作Beer應用

在應用啟動之后,您將看到如下輸出,它表明H2內存數據庫里已填充了“啤酒”。

現在,您可以使用Beers API來添加自己喜歡的啤酒。不過,所有API端點都受到了OIDC的保護。請執行如下命令,將啤酒添加到收藏夾列表之中:

如果一切順利,您將得到如下響應:

至此,您已經為該應用程序都創建了一個新的啤酒條目,并將其添加到了自己的收藏夾列表中。

注意:由于該應用程序使用的是內存數據庫,因此如果重新啟動該應用的話,則需要使用此API重新添加自己喜愛的啤酒。

下面,我們將設置一個內聯鉤子,將beers聲明添加到自己的ID令牌中。

從ID令牌中獲取喜愛的啤酒

為了利用鉤子來處理API,Okta需要能夠通過公共互聯網來對其進行調用。在現實生活中,您可以將應用程序部署在某個地方并進行設置,以方便Okta與之交互。而在此出于演示目的,我們將使用ngrok(https://ngrok.com/)服務,來發送一個唯一的、可公共尋址的域,以連接到本地運行的Spring Boot應用上。請在單獨的終端上運行如下命令:

您將看到如下輸出:

請復制其https鏈接(例如:我所看到的是https://e3fc9a95.ngrok.io),以備后續使用。

設置Okta內聯鉤子

至此,可公開訪問的Spring Boot應用已設置就緒,并可接收Okta的鉤子請求了。但是,我們的Okta org尚需進行如下準備:

首先,您需要向Okta注冊內聯令牌鉤子。在Okta org的管理控制臺中,請依次進入工作流->內聯鉤子,單擊:添加內聯鉤子->令牌。請在對應的表單中輸入如下內容,并點擊“保存”:

其中,Authentication field是Okta用來向鉤子提供身份驗證的標頭。而Authentication secret則是在授權標頭中發送的值。

注意:請在application.yml文件中找到身份驗證的密鑰值。如果鉤子ID和密碼值發生了改變,那么您需要重新計算基本的身份驗證字符串,并將該值反映在上面的設置中。

至此,我們已在自己的Okta org中創建了鉤子。如下圖所示,Spring Boot應用是通過WebSecurityConfiguration.java在鉤子的端點上啟用基本身份驗證的:

基本身份驗證被用于/api/hooks/**端點上,而OAuth 2.0則用于其他所有內容。

令牌轉換內聯鉤子的剖析

在配置授權服務器使用鉤子之前,讓我們先看一下代碼的核心。如下代碼使用HooksController的方法,可以讓ID令牌用您最喜歡的啤酒列表進行patch。

TokenHookRequest的類(class)利用Lombok和一些默認的初始化,來確保您不會收到NullPointerException。

Okta會向控制器發送許多令牌鉤子的請求。在此,我們僅針對需要的內容使用@JsonIgnoreProperties(ignoreUnknown = true)注釋。如您想了解完整的JSON請求示例,請參見--https://developer.okta.com/docs/reference/token-hook/#sample-json-payload-of-a-request

通過使用請求中的login值,該代碼將進行數據庫查找,以檢索與關聯登錄的Person。此處Person的記錄是我們在將其添加到喜愛啤酒列表時被創建的。

同時,該代碼將設置TokenHookResponse,以便通過命令列表來patch ID令牌、并訪問aoken。其中,最關鍵的一行代碼是:

它將啤酒名稱列表添加到了beers聲明所附帶的回復之中。如下便是JSON響應:

而最后一步則是:配置您的授權服務器,以使用該鉤子。

將啤酒添加進您的ID令牌

請在頂層菜單中依次點擊API->授權服務器->默認->訪問策略,向下滾動并點擊“默認策略規則”旁的鉛筆圖標。接著您可以從“使用該內聯鉤子(Use this inline hook)菜單中,選擇“Beers Hook”,并點擊“更新規則”。

只要您在瀏覽器中輸入localhost:4040,便可看到ngrok的監視界面。

如果回到前面的OIDC playground,您可以關閉帶有ID令牌和訪問令牌的結果標簽。通過再次點擊playground上的鏈接,以及“驗證ID令牌”按鈕,您將能夠看到beers聲明、以及已被添加到收藏夾中的任何啤酒。

通過切換回ngrok監視選項卡,您可以看到Okta的請求和Spring Boot應用的響應。

總結

Okta Spring Boot Starter能夠使您通過幾行代碼、以及三個配置屬性,將Spring Boot應用與Okta相集成。它不僅能夠讓Okta的OpenID Connect服務符合相關標準,而且還能為您提供全面的單點登錄體驗。也就是說,同一用戶可以訪問許多不同的OIDC應用,而每一個應用都擁有自己的一套要求和配置。最后,請記住:OIDC不能夠獨立運行,它需要運行在OAuth 2.0之上。OAuth僅專注于授權,而OIDC則添加了身份識別與驗證方面的服務。

原文標題:Boost OAuth 2.0 and OpenID Connect Using Hooks,作者:Micah Silverman

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2014-05-30 12:47:19

醫療

2016-07-20 11:40:00

云計算

2021-03-28 09:17:18

JVM場景鉤子函數

2009-04-18 11:14:24

WLANVoIP通信

2023-10-19 10:24:47

2020-12-22 14:33:25

區塊鏈行業發展物聯網

2023-06-12 10:21:50

物聯網IoT

2014-11-11 10:44:19

華為存儲

2016-06-12 11:53:27

2012-06-12 09:21:53

JavaScript

2017-02-16 14:29:19

聯想

2017-09-29 22:24:03

云計算邊緣計算數據中心

2009-12-23 14:59:32

ADO.NET 2.0

2025-02-14 08:00:00

人工智能Gemini 2.0LLM

2017-03-16 16:06:19

SDNNFV網絡

2011-05-27 14:47:50

友情鏈接

2010-05-12 15:54:36

2020-11-19 08:00:00

Kubernetes工具開發

2016-06-03 10:21:05

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线亚洲免费视频 | 一级毛片免费完整视频 | 99日韩| 91原创视频在线观看 | 婷婷色国产偷v国产偷v小说 | 中文字幕日韩一区 | 色精品视频 | 亚洲国产精品一区 | 久久i | 91最新在线视频 | 日本一区精品 | 日韩欧美在线精品 | 国产精品永久久久久久久www | 国产高清视频在线观看 | 国产一区二区三区不卡av | 色姑娘av| 日韩毛片在线观看 | 国产成人网 | 成人av网站在线观看 | 一区二区三区四区在线 | 国产精品久久久久久久久久软件 | 婷婷色婷婷 | 日韩精品专区在线影院重磅 | 99热在这里只有精品 | 成人久久18免费网站麻豆 | www.久久久.com | 欧美区在线 | av黄色在线播放 | 色吧综合网 | 午夜理伦三级理论三级在线观看 | 国产精品欧美精品 | 一区二区免费看 | 二区中文字幕 | 黑人精品xxx一区一二区 | 国产激情视频网站 | 欧美日韩高清在线一区 | 欧美 日韩 中文 | 国产精品一区二区av | 欧美综合久久 | 久久久综合色 | 国产三级一区二区三区 |