添加 Azure Ad Oauth2 JWT 令牌声明
Posted
技术标签:
【中文标题】添加 Azure Ad Oauth2 JWT 令牌声明【英文标题】:Adding Azure Ad Oauth2 JWT Token Claims 【发布时间】:2017-07-15 00:38:23 【问题描述】:我只是想知道是否可以通过 Azure 门户向 Azure Ad OAuth2 JWT 令牌添加或指定自定义声明? 还是这只是可能的代码方面?
【问题讨论】:
【参考方案1】:我相信您可以通过阅读Authorization in a web app using Azure AD application roles & role claims Azure-AD 示例的How to run the sample as a single-tenant app 部分获得有关如何设置附加声明(例如角色声明)的示例。这需要编辑 Azure-AD 应用程序清单以添加应用程序角色。然后为目录中的不同用户分配不同的角色
【讨论】:
好吧,我认为在角色声明的上下文中说“自定义”是无效的。至于字面上的 custom 声明 - 这是不可能实现的。【参考方案2】:据我所知,Azure AD 目前不支持发出自定义声明。
作为一种解决方法,我们可以使用 Azure AD Graph 添加directory schema extensions。之后,我们可以使用 Azure AD Graph 获取数据扩展,并在验证安全令牌时添加自定义声明,如下代码所示:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
AuthenticationFailed = context =>
context.HandleResponse();
context.Response.Redirect("/Error?message=" + context.Exception.Message);
return Task.FromResult(0);
,
SecurityTokenValidated = context =>
//you can use the Azure AD Graph to read the custom data extension here and add it to the claims
context.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim("AddByMe", "test"));
return Task.FromResult(0);
);
此外,如果您对 Azure 有任何想法或反馈,可以通过here 提交。
【讨论】:
好的,我明白了,这对我来说可能是一个选择。但我正在寻找的是在 azure AD 发布的 jwt 令牌中包含一个 deviceID 声明。我在这里找到了一些关于它的信息:msdn.microsoft.com/en-us/windows/hardware/commercialize/… 在主题下:“使用条款协议语义”和“使用 Azure AD 的管理协议”这仅适用于 BYOD 订阅还是我误解了这一点? @FeiXue 谢谢你的回答顺便说一句:) @John 感谢您与我们分享答案。我建议您撰写一篇帖子并将其标记为答案,以便有相同问题的其他人可以轻松地重新定位并从中受益:) 抱歉,我在上面的问题中可能有点不清楚。我没有找到解决方案,我只是在引用上面的链接时询问:我是否能够在不记名令牌的声明中包含设备 ID,或者这是否只能在 BYOD 订阅中实现?最良好的祝愿。 :) 很抱歉的反驳。我建议你重新打开一个关于 MDM 的新帖子,因为我不熟悉它。以上是关于添加 Azure Ad Oauth2 JWT 令牌声明的主要内容,如果未能解决你的问题,请参考以下文章
刷新的 OAuth2 令牌具有无效签名 (Azure AD OAuth2)
Azure AD - 为啥我无法验证 Azure AD 为我的 Web API 颁发的 JWT 令牌?收到“IDX10516:签名验证失败”错误