仅对某些控制器使用OAuth承载令牌

时间:2017-11-02 19:46:50

标签: c# asp.net oauth

使用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。但是这会为我的所有控制器全局启用授权。有没有办法只为一个控制器(或少数几个控制器或方法)打开它?我有网站其他部分的自定义授权,我可以进入他们,只是检查通过的凭证是否是持有人令牌并拒绝它,但我想知道是否有更优雅的解决方案

2 个答案:

答案 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) {}
}