我对OpenIdConnect还是很陌生,所以如果我仍然想念一些基本概念,请原谅。 我有一个正在为公司开发的SPA风格的Web应用程序(AspNet Core + Aurelia)。 我想通过OpenIdConnect使用AzureAD进行身份验证和授权,到目前为止一切正常,我可以阻止令牌并登录。
问题是我的应用程序需要向客户端的浏览器提供一些特定于应用程序的声明,例如:可以读取X,可以编辑Y ...
如果我将这些声明添加到AzureAD提供的JWT令牌中,则显然它将变得无效,因为签名将与内容不匹配。
如果我使用新声明生成新令牌,但使用应用程序密钥签名,则显然它将是仅在我的应用程序上下文中有效的其他令牌(如果以后需要访问某些令牌其他资源使用AzureAD令牌吗?是否可以将AzureID令牌作为新发布的令牌的声明插入?)
OpenConnectId中是否缺少某些内容?还是有一种方法可以在使令牌有效的情况下,向由诸如AzureAD之类的第三方提供商发行的令牌添加?也许可以要求AzureAd向令牌添加声明并重新签名?
答案 0 :(得分:0)
我认为解决此问题的一种好方法可能是(从我的应用程序后端)为我自己的应用程序的api获取一个access_token,以交换azure提供的id_token(在其验证之后)
因此,浏览器中的应用程序前端将拥有两个令牌,并且每种类型的请求都可以使用正确的令牌。
有些标准化流程与此非常相似,但并不完全相同。
答案 1 :(得分:0)
您可以尝试使用自定义声明映射策略。已记录在here中。
租户管理员使用此功能来自定义令牌中针对其租户中特定应用发出的声明。
据我了解,这仍处于预览阶段。因此,可能需要进行反复试验验证。
或者,您可以在应用程序本身中定义一些策略。既然您知道应用程序中的客户端ID(因此需要将它们用于OpenID Connect请求),则可以创建一个简单的策略来检查令牌并执行验证。