11

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

我目前的挑战是弄清楚应用服务器如何识别用户是否通过认证服务器进行了登录。由于身份验证服务器会生成用于验证用户身份的令牌,我想他们存储在某处并可以被应用服务器查询,但我不知道如何去做这件事。理想情况下,我的应用程序服务器WebAPI端点将能够使用[授权]注释。

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

回答

10

我已经做执行以下操作(使用cookie认证)类似的东西:

1 - 设置cookie域为所有网站

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中使用相同的<machineKey />

矿看起来像这样:

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

现在我可以,比如说,account.example.com进行登录操作,并且将用户重定向到site1.example.com和认证,他们将可以看到。

+0

由于api是无状态的,它不会查找cookie,对吗?据我所知,它只查找认证头。这将如何工作的API?我打算将API保存在我的MVC项目中,因此api将位于example.com/api,这也会起作用吗? – CularBytes 2015-08-26 09:55:52

+2

因此,您可以使用承载令牌代替。关键是机器密钥在机器上是相同的,否则令牌不能被解密。 – 2015-08-26 10:49:45