【发布时间】:2018-02-15 22:34:57
【问题描述】:
我有一个 webapi,我在其中使用属性 [AllowAnonymous] 和 [AuthorizeAttribute] 控制访问。我还创建了一个自定义属性来为授权添加一些逻辑。 Web api 使用不记名令牌进行身份验证。 我的项目中有一个设置(一个名为 InDemo 的布尔值),目的是让我的所有操作都允许匿名请求,换句话说,就像所有操作都具有 [AllowAnonymous] 属性一样。
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider("self"),
AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(30000),
AllowInsecureHttp = true
};
app.UseOAuthBearerTokens(OAuthOptions);
public class CustomApiAuthorizeAttribute : AuthorizeAttribute
{
protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (Settings.Default.InDemo)
return true;
// ... more custom validations
}
}
只要我的请求包含有效的不记名令牌,就可以正常工作,然后调用 IsAuthorized 并且我可以绕过自定义验证。但是,如果令牌无效,则永远不会调用 IsAuthorized 并且会发送“此请求的授权已被拒绝”响应。 现在我想在 InDemo 设置为 true 时忽略令牌,即具有 [AllowAnonymous] 的行为。
【问题讨论】:
标签: c# asp.net-web-api oauth bearer-token