使用OAuth允许访问网络API。我有这样的东西(来自各种教程,例如:http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/):
public void ConfigureOAuth(IAppBuilder app, System.Web.Mvc.IDependencyResolver kernel)
{
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider(),
};
// Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
在Startup.cs
。但是这会为我的所有控制器全局启用授权。有没有办法只为一个控制器(或少数几个控制器或方法)打开它?我有网站其他部分的自定义授权,我可以进入他们,只是检查通过的凭证是否是持有人令牌并拒绝它,但我想知道是否有更优雅的解决方案
答案 0 :(得分:0)
我最近一直在玩Oauth并且有一个不同的场景,我需要[allowAnonymous]到API中的某些控制器,同时拒绝匿名我的项目的剩余部分。
我不知道这是否会对您的情况有所帮助,但我认为如果它有用,我会分享。
将以下内容添加到每个控制器的API的Web.config中,我需要allowAnonymous来解决我的问题。
</system.codedom>
<location path="api/controller">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
</configuration>
答案 1 :(得分:0)
只需在控制器级别或任何Web方法内部使用[AllowAnonymous]装饰器。对我来说,没有必要按照@Marshall的建议配置web.config
[AllowAnonymous]
public class MyController : ApiController
{
[AllowAnonymous]
[HttpGet]
public async Task<IHttpActionResult> GetDetails(string name) {}
}