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

auth2

auth2

如果您正在使用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

auth2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值