gpt4 book ai didi

ASP.NET Identity - 关于 [Authorize] 和 RoleManager 的混淆

转载 作者:行者123 更新时间:2023-12-01 11:39:16 27 4
gpt4 key购买 nike

我一直在关注这篇关于为新的 ASP.NET Identity 系统创建自定义“存储提供程序”的帖子,到目前为止,它已被证明非常有用;

Creating a custom MySQL Identity Provider

我没有使用 MySQL,我使用的是 RavenDB - 是的,我已经查看了可用的 RavenDB 身份提供程序 - 这不是我的问题。我的问题来自 IUserRoleStore<IdentityUser>然后是 IdentityRole ,以及 RoleStore .

我看到他们被创建 - 我什至看到他们如何访问数据以查看用户是否担任角色等。但后来,我只看到这个..

[Authorize(Roles = "Admin")]
public AccountController : Controller {
/// ... etc .etc..
}

这是我完全迷路的地方。我查阅了很多关于新的 ASP.NET Identity 系统的教程,但我无法弄清楚什么时候某些东西与 AuthorizeAttribute 相关联。 .它怎么知道使用 RoleStore我做了?它怎么知道使用 IdentityRole我做了?它验证的是什么?

这些都是我在任何地方都找不到的东西,这让我有点抓狂。我发现的所有东西都一直插入 Entity Framework ,这不是我想要使用的——而且它就是开箱即用的方式,而且它们似乎没有告诉你如何确保 Authorize 就停止了。像您希望的那样工作。

最佳答案

其实比这要简单一点。当用户登录时,AccountController 中的这些行创建一个 ClaimsIdentity 并且 auth 中间件设置一个 cookie...

var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);

创建 ClaimsIdentity 时会从数据库中读取角色信息。身份(包括角色)被序列化并加密到 cookie 中。在后续请求中,ClaimsIdentity 由中间件从 cookie 中解密和反序列化。身份附加到线程,这就是 AuthorizeAttribute 用来确定用户是否在某个角色中的内容。您还可以在 Controller 中使用 User.Identity 以编程方式访问 ClaimsIdentity

关于ASP.NET Identity - 关于 [Authorize] 和 RoleManager 的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23179857/

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