【问题标题】:ASP.NET Identity in Microservice Architecture微服务架构中的 ASP.NET 身份
【发布时间】:2014-12-06 05:39:07
【问题描述】:

我正在尝试通过将主要组件分解为单独的 Web 服务器来使用微服务架构来实现 Web 应用程序。我正在使用 ASP.NET 身份(仅电子邮件/用户名登录,没有 Facebook 等)和“主”应用程序服务器实现身份验证服务器。

我当前的挑战是弄清楚应用服务器将如何识别用户是否通过身份验证服务器登录。由于身份验证服务器会生成用户验证用户身份的令牌,我想它们存储在某个地方并且可以由应用程序服务器查询,但我不知道如何去做。理想情况下,我的应用程序服务器 WebAPI 端点将能够使用 [Authorize] 注释。

问:一台服务器如何使用 ASP.NET Identity 通过单独的身份验证服务器控制访问?

【问题讨论】:

    标签: c# asp.net asp.net-web-api asp.net-identity asp.net-identity-2


    【解决方案1】:

    我通过执行以下操作(使用 cookie 身份验证)做了类似的事情:

    1 - 将 cookie 域设置为所有网站的 TLD

    我的Startup.Auth.cs 看起来像这样:

    app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => {
                            var identity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
    
                            //some additional claims and stuff specific to my needs
                            return Task.FromResult(identity);
                        })
                },
                CookieDomain = ".example.com"
            });
    

    2 - 更新所有网站的 web.config 以使用相同的&lt;machineKey /&gt;

    我的看起来像这样:

    <machineKey 
        decryption="Auto" 
        decryptionKey="my_key" 
        validation="HMACSHA512"
        validationKey="my_other_key" />
    

    现在我可以在account.example.com 上执行登录操作,并将用户重定向到site1.example.com,他们将被视为已通过身份验证。

    【讨论】:

    • 由于 api 是无状态的,它不会查找 cookie,对吗?据我所知,它只查找身份验证标头。这对 API 有什么作用?我打算将 API 保留在我的 MVC 项目中,所以 api 将位于 example.com/api,这也可以吗?
    • 因此您可以使用不记名令牌。关键是机器密钥跨机器是一样的,否则无法解密token。
    • 使用身份验证 cookie 并不一定会使您的 API “有状态”。如果您尝试进行无状态操作(如在 REST 中),则使用身份验证 cookie 与使用另一个身份验证标头相同。您可以安全地使用 cookie(它只是一个标准的 HTTP 标头)。
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 2018-09-24
    • 1970-01-01
    • 2017-05-28
    • 2020-03-13
    • 2019-08-02
    • 2020-07-26
    • 2015-12-26
    相关资源
    最近更新 更多