日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将Auth0 OIDC(OAUTH 2)与授权(组和角色)集成

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将Auth0 OIDC(OAUTH 2)与授权(组和角色)集成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果您正在使用Auth0對多個現有應用程序中的用戶進行身份驗證和授權,則可能需要將下一個Web應用程序與Auth0集成。

有多種方法可以執行此操作,例如,如果要將Jenkins與Auth0集成,則可以使用SAML v2;否則,可以使用SAML v2。 這篇博客文章解釋得很好 。

如果您的應用程序不支持SAML v2 或使其成為企業付費功能 ,則可能需要使用OAuth2(或OIDC )集成。

讓我們以開源監視解決方案Grafana為例,并將其與Auth0集成。

使用Auth0對Grafana用戶進行身份驗證:只需閱讀文檔

Grafana官方文檔將向您說明如何:

  • 將[server]的root_url選項設置為正確的回調URL
  • 在Auth0中創建一個新客戶端,將允許的回調Urls設置為https://<grafana domain>/login/generic_oauth
  • 使用類似的配置來配置Grafana:
; not mandatory, but ; not mandatory, but super useful to debug OAuth interactions with Auth0 [log] level = debug [server] root_url = https: //<grafana domain>/ [auth.generic_oauth] enabled = true allow_sign_up = true team_ids = allowed_organizations = name = Auth0 client_id = <client id> client_secret = <client secret> scopes = openid profile email auth_url = https: //<domain>/authorize token_url = https: //<domain>/oauth/token api_url = https: //<domain>/userinfo

問題是……您將不會獲得任何類型的授權。 您的所有Auth0用戶都將能夠登錄Grafana,但默認情況下將被分配為Viewer角色。 這是因為Grafana需要從Auth0接收有關登錄用戶角色的其他信息。

t= 2020 - 04 -14T11: 39 : 03 + 0000 lvl=dbug msg= "Received user info response" logger=oauth.generic_oauth raw_json= "{\"sub\":\"auth0|5e87486a85dd980c68d912c4\",\"nickname\":\"anthony\",\"name\":\"anthony@host.net\",\"picture\":\" https://s.gravatar.com/avatar/79033b96a632e4ea71b59fe9554c53a2?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fan.png \",\"updated_at\":\"2020-04-14T11:39:02.862Z\",\"email\":\"anthony@host.net\",\"email_verified\":false}" data= "Name: anthony@host.net, Displayname: , Login: , Username: , Email: anthony@host.net, Upn: , Attributes: map]" t= 2020 - 04 -14T11: 39 : 03 + 0000 lvl=dbug msg= "User info result" logger=oauth.generic_oauth result= "&{Id: Name:anthony@host.net Email:anthony@host.net Login:anthony@host.net Company: Role: Groups:]}" t= 2020 - 04 -14T11: 39 : 03 + 0000 lvl=dbug msg= "OAuthLogin got user info" logger=oauth userInfo= "&{Id: Name:anthony@host.net Email:anthony@host.net Login:anthony@host.net Company: Role: Groups:]}"

如果查看上面的Grafana調試日志,則會看到該用戶已登錄,但是由于未映射任何角色,因此為該用戶分配了Viewer角色

Auth0中的授權:安裝擴展,然后設置組和角色

在Auth0中,您首先需要添加Authorization擴展 ,然后將提示您配置擴展:

完成后(確保啟用“組和角色”,然后旋轉并按發布規則),然后可以創建一些組

然后,您可以將用戶添加到Admin組

如果您回到Auth0,更確切地說是規則面板,則會看到該擴展添加并激活了新規則 :

不幸的是,這還不夠:我們需要讓Auth0豐富發送回Grafana的userinfo ; 在上一章中,我們看到了Grafana調試日志顯示給我們:

{ "sub" : "auth0|5e87486a85dd980c68d912c4" , "nickname" : "anthony" , "name" : "anthony@host.net" , "picture" : " https://s.gravatar.com/avatar/79033b96a632e4ea71b59fe9554c53a2?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fan.png " , "updated_at" : "2020-04-14T11:39:02.862Z" , "email" : "anthony@host.net" , "email_verified" : false }

因此,要使用組信息豐富此json對象,我們需要創建另一個規則,以豐富用戶個人資料; 讓我們創建一個新規則(我將其命名為add-groups )并添加以下代碼:

function addAttributes(user, context, callback) { const namespace = ' https://dahanne.net/ ' ; context.idToken[namespace + 'groups' ] = user.groups; callback( null , user, context); }

現在,我們應該對Auth0租戶應用2條規則:

如果您現在重新登錄Grafana,您的Grafana個人資料將不會看到任何更改。 但是如果您查看日志,尤其是raw_json userinfo對象中的raw_json ,您會注意到我們的規則添加了一個新字段:

{ "sub" : "auth0|5db0908a8bc0400c5c05604e" , "nickname" : "anthony" , "name" : "anthony@host.net" , "picture" : " https://s.gravatar.com/avatar/79033b96a632e4ea71b59fe9554c53a2?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fan.png " , "updated_at" : "2020-04-13T22:49:58.965Z" , "email" : "anthony@host.net" , "email_verified" : true , " https://dahanne.net/groups " : [ "Admin" ] }

現在,我們需要指導Grafana如何讀取這個新字段,并使用它來為我們的用戶個人資料分配一個組。

返回到Grafana,使用JMESPath從Auth0響應中檢索用戶角色

我們首先需要閱讀Grafana JMESPath的文檔

從文檔中,我們可以推斷出我們需要這樣的映射:

role_attribute_path = contains( " https://dahanne.net/groups " [*], 'Admin' ) && 'Admin' || contains( || contains( " https://dahanne.net/groups " [*], 'Editor' ) && 'Editor' || 'Viewer'

現在,如果您重新登錄Grafana,并查看調試日志,您將看到Auth0中的新字段:

lvl=dbug msg= "User info result" logger=oauth.generic_oauth result= "&{Id: Name:anthony@host.net Email:anthony@host.net Login:anthony@host.net Company: Role:Admin Groups:]}"

當然,您在Grafana中的用戶個人資料現已更新:

最后的話

盡管認證集成已被很好地證明,但我在弄清楚授權部分時還是遇到了麻煩……起初,我嘗試在Auth0規則中豐富user對象,但只有豐富上下文idToken (感謝我的同事Brett幫助我解決了問題)那); 更重要的是,作為URL的名稱空間也是必須的!

不過,在Grafana方面,開箱即用時一切都很好。 調試日志確實有幫助!

翻譯自: https://www.javacodegeeks.com/2020/04/integrating-auth0-oidc-oauth-2-with-authorization-groups-and-roles.html

總結

以上是生活随笔為你收集整理的将Auth0 OIDC(OAUTH 2)与授权(组和角色)集成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。