gpt4 book ai didi

asp.net - 强制另一个用户使用 ASP.NET Identity 2.1.0 刷新他们的声明

转载 作者:行者123 更新时间:2023-12-03 16:28:18 26 4
gpt4 key购买 nike

我正在使用 Asp.NET Identity 2.1.0我存储了一个 Accounts 的列表那一个 User有权访问,作为 claim 。 ClaimsIdentity User 时生成登录:

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

// Add Claims concerning Account
userIdentity.AddClaim(new Claim("AccountList", SerializedListOfAccounts));

return userIdentity;
}

假设管理员撤销 User A的访问特定帐户。怎么强制 User A再生它的 ClaimsIdentity ?请记住,它不在 User A 的上下文中.而且我不想等到 cookie 过期(并且会自动生成一个新的 ClaimsIdentity

是否可以?有没有办法告诉服务器关注 User A的 cookie 无效并强制它重新生成它?

我想要这种行为的原因是创建一个自定义 AuthorizeAttribute我可以戴上检查 Claims 的 Controller 看看是不是 User是否可以访问,以避免额外的数据库往返。

最佳答案

您不能将他们的声明存储在 cookie 上,而是将它们应用于管道早期对身份的每个请求。你必须破解 Startup.Auth.cs要做到这一点。我就是这样做的here .

这是您可以使用的要点:

public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
Provider = GetMyCookieAuthenticationProvider(),
// other configurations
});

// other usual code
}



private static CookieAuthenticationProvider GetMyCookieAuthenticationProvider()
{
var cookieAuthenticationProvider = new CookieAuthenticationProvider();
cookieAuthenticationProvider.OnValidateIdentity = async context =>
{
// execute default cookie validation function
var cookieValidatorFunc = SecurityStampValidator.OnValidateIdentity<UserManager, ApplicationUser>(
TimeSpan.FromMinutes(10),
(manager, user) =>
{
var identity = manager.GenerateUserIdentityAsync(user);
return identity;
});
await cookieValidatorFunc.Invoke(context);

// sanity checks
if (context.Identity == null || !context.Identity.IsAuthenticated)
{
return;
}


// get your claim from your DB or other source
context.Identity.AddClaims(newClaim);
};
return cookieAuthenticationProvider;
}
}

您需要对每个请求应用声明的缺点,这可能不是很有效。但是在正确的位置进行适量的缓存会有所帮助。这段代码也不是最容易工作的地方,因为它处于管道的早期,你需要自己管理 DbContext和其他依赖项。

好处是声明会立即应用于每个用户的请求,您无需重新登录即可立即更改权限。

关于asp.net - 强制另一个用户使用 ASP.NET Identity 2.1.0 刷新他们的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com