【发布时间】:2017-01-30 18:09:31
【问题描述】:
我使用 OpenID Connect 标准和 ASP NET MVC 网站实现了一个示例应用程序。我的目标是将敏感数据的存储外包给 Azure,所以我使用了 Azure Active Directory。由于不可能在 Azure 中向用户添加自定义属性,因此我将非敏感用户声明存储在我们的私有数据库中。我设法得到了这个声明并将它们“添加”到 cookie 中,如下所示:
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthorizationCodeReceived = context =>
{
var objectId = context.AuthenticationTicket.Identity.Claims.First(x => x.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier");
var claims = GetUserClaims(objectId.Value);
foreach (var item in claims)
{
context.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim(item.Key, item.Value));
}
return Task.FromResult(0);
}
}
通过这种方式,我在 cookie 中添加了必需的声明,因此这些声明在我的用户对象中一直存在,直到用户退出这很好,但有一个声明可以在会话期间更改(基本上用户可以在一页上更改它)。问题是我找不到如何在 cookie 中“更改”此声明,因此它会持续存在。理想情况下,我想以某种方式强制
已收到授权码
函数被再次调用。可能吗 ?还是有另一种方法可以交换存储在 cookie 中的值?
到目前为止,我唯一的解决方案是在用户更改此值时注销用户,这将迫使他再次注销,并且我的 AuthorizationCodeReceived 回调将再次被调用,但这不是一种非常用户友好的方式。
【问题讨论】:
标签: asp.net-mvc azure-active-directory openid-connect