oidc auth2.0_将Auth0 OIDC(OAUTH 2)与授权(组和角色)集成

oidc auth2.0

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

oidc auth2.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

follow 开源项目关于NoClassDefFoundError错误的解决方法

【0】README0.1&#xff09;本文旨在po出当我们follow open projects 的时候&#xff0c;遇到一些在open API中不存在&#xff08;NoClassDefFoundError&#xff09;的类时的解决方法&#xff1b;【1】problemsolution&#xff1a;1.1&#xff09;problem&#xff1a;一般case下…

camel apache_如何使用Apache Camel,Quarkus和GraalVM快速运行100个骆驼

camel apache今天&#xff0c;我继续在youtube上练习&#xff0c;并录制了10分钟的视频&#xff0c;介绍了如何创建一个新的Camel and Quarkus项目&#xff0c;该项目包括Rest和HTTP服务以及开箱即用的健康检查和指标。 然后比较在JVM模式下运行示例与使用GraalVM编译的本机的…

漫画算法:找出缺失的整数

转载自 玻璃猫 程序员小灰 小灰一边回忆一边讲述起当时面试的情景...... 题目&#xff1a;一个无序数组里有99个不重复正整数&#xff0c;范围从1到100&#xff0c;唯独缺少一个整数。如何找出这个缺失的整数&#xff1f; 解法一&#xff1a; 创建一个HashMap&#xff0c;以1到…

tomcat(8)载入器

【0】README0.0&#xff09;本文部分描述转自“深入剖析tomcat”&#xff0c;旨在学习 tomcat(8)载入器 的基础知识&#xff1b;0.1&#xff09;一个标准web 应用程序中的载入器&#xff1a;简单来说就是 tomcat中的载入器&#xff1b;0.2&#xff09;servlet容器需要实现一个自…

micrometer_具有InlfuxDB的Spring Boot和Micrometer第3部分:Servlet和JDBC

micrometer在上一个博客中&#xff0c;我们使用由InfluxDB支持的Micrometer设置了React式应用程序。 在本教程中&#xff0c;我们将使用传统的带有JDBC的基于Servlet的阻塞Spring堆栈。 我选择的数据库是postgresql。 我将使用与先前博客文章相同的脚本。 因此&#xff0c;我…

漫画算法:辗转相除法是什么鬼

转载自 玻璃猫 程序员小灰 大四毕业前夕&#xff0c;计算机学院的小灰又一次顶着炎炎烈日&#xff0c; 去某IT公司面试研发工程师岗位…… 半小时后&#xff0c;公司会议室&#xff0c;面试开始…… 小灰奋笔疾书&#xff0c;五分钟后…… 小灰的思路十分简单。他使用暴力…

tomcat(9)Session管理

【0】README0.0&#xff09;本文部分描述转自“深入剖析tomcat”&#xff0c;旨在学习“tomcat-Session管理” 的基础知识&#xff1b;0.1&#xff09;Catalina通过一个称为Session 管理器的组件来管理建立的Session对象&#xff0c;该组件由org.apache.catalina.Manager接口来…

micrometer_具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB

micrometer自从我们添加了基本应用程序以来&#xff0c;是时候启动InfluxDB实例了。 我们将按照之前的教程进行操作&#xff0c;并添加一个docker实例。 docker run –rm -p 8086&#xff1a;8086 –name influxdb-本地influxdb 是时候在我们的pom上添加微米InfluxDB依赖项了…

漫画:什么是volatile关键字?(整合版)

转载自 永远爱大家的 程序员小灰 ————— 第二天 ————— ———————————— Java内存模型简称JMM&#xff08;Java Memory Model&#xff09;&#xff0c;是Java虚拟机所定义的一种抽象规范&#xff0c;用来屏蔽不同硬件和操作系统的内存访问差异&#xff0c;让j…

tomcat(supplement)HttpConnector.initialize() 和 start() 方法 以及 StandardContext.start()方法的分析

【0】README 0.0&#xff09;本文中源代码的背景&#xff0c;参见 tomcat(9)session管理 0.1&#xff09;本文主要以图片的形式分析他们大致的调用过程&#xff1b; 0.2&#xff09;HttpConnector org.apache.catalina.connector.http.HttpConnector; 而StandardContext o…

restful rest_HATEOAS的RESTful服务。 超媒体:REST的秘密要素

restful rest在这篇文章中&#xff0c;我们将介绍有关HATEOAS的RESTful服务的综合文章。 超媒体是REST的秘密成分。 1.简介 在本教程的前一部分中&#xff0c;我们花了一些时间来刷新有关REST体系结构样式的基本原理的知识。 业界对REST状态的批判性眼光揭示了一个令人失望的…

漫画:什么是单例设计模式

转载自 永远爱大家的 程序员小灰 ————— 第二天 ————— 单例模式第一版&#xff1a; 1234567891011public class Singleton {private Singleton() {} //私有构造函数private static Singleton instance null; //单例对象//静态工厂方法public static Singleton ge…

如何在工作繁重、睡眠较少的情况下保持旺盛精力?

作者&#xff1a;陈炬 链接&#xff1a;https://www.zhihu.com/question/23177623/answer/47785761 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 本人也在创业&#xff0c;结合《精力管理》一书&#xff0c;说说我…

mockito接口没法赋值_Mockito:无法实例化@InjectMocks字段:类型是接口

mockito接口没法赋值使用Mockito进行Java类的模拟和存根的任何人&#xff0c;可能都熟悉InjectMocks -annotation。 在要测试的类上使用此批注&#xff0c;Mockito将尝试通过构造函数注入&#xff0c;setter注入或属性注入来注入模拟。 魔术成功了&#xff0c;它无声地失败了&a…

tomcat(10)安全性

【0】README0.0&#xff09;本文部分描述转自“深入剖析tomcat”&#xff0c;旨在学习 tomcat(10)安全性 的基本知识&#xff1b;0.1&#xff09;servlet技术支持通过配置部署描述器&#xff08;web.xml&#xff09;文件来对这些内容进行访问控制&#xff1b;&#xff08;干货—…

SonarQube 8.3.x中的Maven项目的测试覆盖率报告

几年前&#xff0c;我写了一篇博客文章&#xff0c;介绍如何在SonarQube中生成测试报告&#xff0c;该报告独立于单元测试和集成测试的测试报告中。 从SonarQube 6.2开始&#xff0c;测试报告不再在这些类别中分开&#xff08;请参阅SonarQube的博客文章 &#xff09;。 SonarQ…

单例模式懒汉、饿汉和登记

转载自 JAVA设计模式之单例模式本文继续介绍23种设计模式系列之单例模式。 概念&#xff1a;  java中单例模式是一种常见的设计模式&#xff0c;单例模式的写法有好几种&#xff0c;这里主要介绍三种&#xff1a;懒汉式单例、饿汉式单例、登记式单例。  单例模式有以下特点…

量角器中Selenium定位器的完整指南(示例)

在测试网站的功能时&#xff0c;特别是Web元素&#xff08;例如单选按钮&#xff0c;文本框&#xff0c;下拉列表等&#xff09;&#xff0c;您需要确保能够访问这些元素。 Selenium定位器正是出于这个目的&#xff0c;通过使用此命令&#xff0c;我们可以识别这些Web元素DOM&a…

MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结

【0】README0.1&#xff09;本文旨在review MySQL的自然联结外部联结&#xff08;左外连接&#xff0c;右外连接&#xff09;内部联结 的相关知识&#xff1b;【1】自然联结1&#xff09;自然联结定义&#xff1a;无论何时对表进行联结&#xff0c;应该至少有一个列出现不止一个…

MySQL 添加列+修改列+删除列

【0】REAMDE 0.1&#xff09;本文部分文字描述转自 http://blog.163.com/zhangjie_0303/blog/static/99082706201191911653778/ 0.2&#xff09;本文旨在review mysql 对列的相关操作&#xff1a;如添加&#xff0c;修改&#xff0c;删除以及重命名表名等操作&#xff1b; 【1】…