将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:
問題是……您將不會獲得任何類型的授權。 您的所有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)与授权(组和角色)集成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jsf xhtml调用方法_JSF的工作
- 下一篇: tomee_一罐将其全部统治:Apach