2016-10-27 115 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

相关问题