本文转自:http://www.cnblogs.com/duyao/p/5980105.html
翻译如下:
在某些情况下,比如单页的应用程序,可以与多种认证来方式结合。例如,您的应用程序可能使用基于Cookie的身份验证来登录和JavaScript的请求承载认证。在某些情况下,可能一个授权验证的中间件有多个的实例。两个Cookie中间件,其中一个包含了基本验证,而另外一个当多个条件的认证被触发由于这个用户请求的操作需要额外的安全要求。
认证方案会被定义当认证的中间件已经配置认证的过程。例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
app.UseCookieAuthentication( new CookieAuthenticationOptions() { AuthenticationScheme = "Cookie" , LoginPath = new PathString( "/Account/Unauthorized/" ), AccessDeniedPath = new PathString( "/Account/Forbidden/" ), AutomaticAuthenticate = false }); app.UseBearerAuthentication(options => { options.AuthenticationScheme = "Bearer" ; options.AutomaticAuthenticate = false ; }); |
在如上的配置中,添加了两个认证中间件,一个是Cookie,一个是Bearer。
注意:
添加多个身份验证中间件时,应确保没有将中间件配置为自动运行。 可以通过将AutomaticAuthenticate选项属性设置为false来执行此操作。 如果你没有加这一点,按方案将不起作用。
使用Authorize Attribute选择方案
由于我们没有将身份验证中间件配置为自动运行并创建身份,因此在授权时必须选择要使用的中间件。 选择要授权的中间件的最简单方法是使用ActiveAuthenticationSchemes
属性。 此属性接收要使用的验证方案的逗号分隔列表。 例如;
1
2
|
[Authorize(ActiveAuthenticationSchemes = "Cookie,Bearer" )] public class MixedController : Controller |
在上面的示例中,Cookie和Bearer中间件将运行,并且有机会为当前用户创建和附加身份。 通过指定单个方案,只有指定的中间件将运行;
1
|
[Authorize(ActiveAuthenticationSchemes = "Bearer" )] |
在这种情况下,只有具有Bearer方案的中间件将运行,并且任何基于Cookie的身份将被忽略。
在策略中选择方案
如果您希望在策略中指定所需的方案,则可以在添加策略时设置“身份验证方案”集合。
1
2
3
4
5
6
|
options.AddPolicy( "Over18" , policy => { policy.AuthenticationSchemes.Add( "Bearer" ); policy.RequireAuthenticatedUser(); policy.Requirements.Add( new Over18Requirement()); }); |
在此示例中,Over18这个策略将仅对由Bearer中间件创建的身份运行。