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

相關問題