1。身份验证筛选器
使用
Authentication Filters
介绍了Web API 2。他们只是表演而已
身份验证
,但不要说用户是否有权访问资源。正是你需要的。
public class JwtAuthenticationFilter : IAuthenticationFilter
{
public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
{
var token = GetTokenFromAuthorizeHeader(context.Request);
if (TokenIsValid(token)) {
var principal = CreatePrincipal(token);
// Use context.Principal instead of Thread.CurrentPrincipal
// and HttpContext.Current.User whenever.
context.Principal = principal;
}
return Task.CompletedTask;
}
// TODO: Implement remaining IAuthencitaionFilter members.
}
应用这个
JwtAuthenticationFilter
全局为所有请求执行身份验证:
// httpConfig is an instance of HttpConfiguration
httpConfig.Filters.Add(new JwtAuthenticationFilter());
通过这种方式,如果令牌正常,则对用户进行身份验证。但是,仍然所有用户都可以访问您的API,即使是令牌无效的用户。让我们更进一步保护它。
2。授权属性
AuthorizeAttribute
您需要限制未经身份验证的用户访问Web API。您可以使用与上面相同的方法全局应用它:
httpConfig.Filters.Add(new AuthorizeAttribute());
没有有效令牌的人不会通过。很好。最后一步是允许具有无效令牌的用户访问某些特定资源。
三.allowanonymousAttribute属性
从现在开始
AllowAnonymousAttribute
应该有效。基本上
AuthorizeAttribute
只检查资源是否由标记
[AllowAnonymous]
在这种情况下跳过授权。
结论
通常,Web API受到保护,不受未经身份验证的用户的影响,但某些资源可以通过应用
[异基因]
.
JWT身份验证筛选器
我们在任何情况下都实现了上述功能,因此具有有效令牌的用户将始终得到身份验证——即使资源允许匿名访问。