轻松使用 ASP.NET Identity 作为角色提供者

2023-12-14

我刚刚花了两天时间研究并使用现有数据库实现新的 ASP.NET Identity 系统。更多信息请参见这里:将 ASP.NET Identity 集成到现有的 DbContext 中.

现在,我有一份工作UserStore and RoleStore,但我似乎无法弄清楚如何在我的 ASP.NET MVC 5 应用程序中利用它们,而不编写像所有让我困惑的 Identity 示例中那样的大量代码。

我想要实现两件事:1)使用 cookie 来维护授权,2)使用角色来限制应用程序对视图和控制器中呈现的内容的访问。

为了能够使用这些,我显然需要使用Controller.User代表授权用户的属性并查看其角色。我如何让我的身份实现来实现这一点?

最后,在 Identity 示例中,我看到他们正在使用 OWIN,我对此有所了解,但似乎这是一种超级迂回的方式,我仍然不知道如何正确实现。就索赔而言,它们让我困惑的程度是我理解的程度的两倍。

如果有任何正确方向的指示,我将不胜感激。


回到这个问题后,我想我找到了一个简单有效的解决方案。我最终为 OWIN 创建了一个启动配置类。据我了解,由于 OWIN 是一个中间件,它会拦截请求,计算出身份验证(如果有),并更新User的财产Controller类在哪里User是一个实例ClaimsIdentity class.

之后,其他一切都将像您通常使用的那样工作UserASP.NET 的属性。我确实用一个名为的额外属性扩展了我的基本控制器UserId它解析了User属性来获取数据库中使用的实际 Id。我的目的是让我可以查询真实的 IDEmployee我的班级DbContext用途。我们会看看它是否保留,同时,这是我的代码StartupConfiguration:

public sealed class StartupConfig {
    public void Configuration(
        IAppBuilder app) {
        this.ConfigureAuthentication(app);
    }

    public void ConfigureAuthentication(
        IAppBuilder app) {
        app.UseCookieAuthentication(new CookieAuthenticationOptions {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/"),
            ExpireTimeSpan = new TimeSpan(0, 60, 0)
        });
    }
}

这是我的配置方式UserId财产:

protected int UserId {
    get {
        return Convert.ToInt32(base.User.Identity.GetUserId());
    }
}

不要忘记用以下内容来装饰班级[assembly: OwinStartupAttribute(typeof(namespace.StartupConfig))]。希望这对某人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

轻松使用 ASP.NET Identity 作为角色提供者 的相关文章

随机推荐