【发布时间】:2019-05-18 10:06:44
【问题描述】:
我需要在 SQL 数据库中存储用户的唯一标识符。我的应用程序通过 OWIN 使用 OpenID Connect 来针对 Azure AD 对用户进行身份验证,并且基于 MVC 5 框架。我可以通过 http://schemas.microsoft.com/identity/claims/objectidentifier 声明访问用户的 ObjectId。我知道如何获取声明的唯一方法是将委托添加到“OpenIdConnectAuthenticationOptions”的“通知”属性中。由于这是应用程序启动的一部分,因此委托无法将此信息传递给会话。
我已经看到建议使用 Graph API 将 User.Identity.Name 与 ObjectId 匹配的目标相似的问题的答案。我宁愿避免这样做,因为我的应用程序本身就非常需要资源。
这是我目前所拥有的。我只需要将声明放入会话中,或从会话中访问声明。 (这并不总是有效,例如,如果用户已经登录,但这是我迄今为止最好的)
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthorizationCodeReceived = (context) =>
{
IEnumerable<Claim> claims = context.AuthenticationTicket.Identity.Claims;
Claim objectId = claims.First(claim => claim.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier");
// ???
return Task.FromResult(0);
}
},
【问题讨论】:
标签: asp.net-mvc azure-active-directory openid-connect owin-middleware