2016-10-27 42 views
1

我有一個WEB Api,使用用戶帳戶註冊等也令牌。 現在我想要使用Token(JWT承載)和Identity來保護所有端點。因此,用戶不能只擁有有效的令牌,但他也必須登錄。 當我使用[Authorize(Policy = "Bearer")]時,我獲得了令牌授權,當我使用[Authorize]時,我獲得身份授權,如何組合兩者?我會假設我可以做[Authorize(Policy =「Bearer,Identity」)](基於Roles邏輯),但是我得到了一個錯誤,認爲該策略不存在。 有沒有一種方法來實現這一點?如何在資源上使用令牌和身份驗證?

回購:https://github.com/drakoumel/DatacircleAPI

回答

2

當我使用[授權(策略=「承載」)]我得到令牌授權,當我用[授權]我拿到身份的授權,我怎麼能結合兩種? [原文如此]

設置ActiveAuthenticationSchemes屬性。它採用逗號分隔的方案名稱列表。以下是激活Identity使用的Cookie中間件和持票人(令牌)中間件的示例。

[Authorize(ActiveAuthenticationSchemes = "Bearer, Identity.Application")] 

持票人和cookie中間件都將運行並有機會爲當前用戶創建和追加身份。

備註:

您可以激活任何您需要的認證方案。缺省方案名稱位於IdentityAuthentication名稱空間中。例如。

Microsoft.AspNetCore.Authentication.JwtBearer 
    .JwtBearerDefaults.AuthenticationScheme // "Bearer" 

Microsoft.AspNetCore.Identity 
    .IdentityCookieOptions.ApplicationCookie // "Identity.Application" 

... 

參見:

+0

嗯我所施加的線和現在雖然令牌無效(壽命無效)它繼續正常和讓用戶訪問資源,因爲他已登錄。不應該它需要兩個認證通過? 這是我的控制器(getUser())https://github.com/drakoumel/DatacircleAPI/blob/master/Controllers/AccountController.cs 而我的startup.cs https://github.com/drakoumel/DatacircleAPI/ blob/master/Startup.cs – Drakoumel

+0

因此,我得到 info:Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware [7] 承載未經過身份驗證。失敗消息:IDX10223:生命週期驗證失敗。令牌已過期。 和 info:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware [3] HttpContext.User通過來自authenticationScheme:Identity.Application的AutomaticAuthentication合併。 info:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware [8] AuthenticationScheme:Identity.Application已成功通過身份驗證。 – Drakoumel

+0

根據文件說,這兩個政策將有改變填充用戶,是否有可能強制執行,必須通過? – Drakoumel

相關問題