承载令牌未使用authorize属性进行验证

时间:2015-08-13 10:47:26

标签: api asp.net-web-api owin bearer-token

我有一个简单的api控制器,带有方法" GetDashboard"包含Authorize属性,如此...

[RoutePrefix("api/Dashboard")]
public class DashboardController : ApiController
{
    [HttpGet]
    [Authorize]
    [Route("GetDashboard")]
    public HttpResponseMessage GetDashboard()
    {
       //Do stuff...
    }
}

我使用Owin管道和承载令牌进行api授权,在我的Owin配置中,我使用app.Map()功能创建了两个授权提供程序,根据您的输入选择正确的机制来授权用户指向api就像这样...

        app.Map("/RouteOne", app1 =>
        {
            appAteb.UseCookieAuthentication(new CookieAuthenticationOptions());
            appAteb.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            PublicClientId = "app1";
            OAuthOptions = new OAuthAuthorizationServerOptions
            {
                TokenEndpointPath = new PathString("/Authenticate1"),
                Provider = new ApplicationOAuthProvider(PublicClientId),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
                AllowInsecureHttp = false
            };

            app1.UseOAuthBearerTokens(OAuthOptions);

        });


        app.Map("/RouteTwo", app2 =>
        {
            app2.UseCookieAuthentication(new CookieAuthenticationOptions());
            app2.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            PublicClientId = "app2";
            OAuthOptions = new OAuthAuthorizationServerOptions
            {
                TokenEndpointPath = new PathString("/Authenticate2"),
                Provider = new AnotherAuthProvider(PublicClientId),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
                AllowInsecureHttp = false

            };
            app2.UseOAuthBearerTokens(OAuthOptions);
        });

两种机制都正确验证,生成了承载令牌并传回给浏览器,但是当我在仪表板控制器上使用令牌进行授权时,它会返回401 Unorthorized?

我怀疑它与app.map有关,因为如果我删除它并且只有一个机制调用我的仪表板控制器工作正常但是我需要能够使用授权机制和我的api控制器来接受令牌。

非常感谢任何有关解决此问题的帮助。

由于

1 个答案:

答案 0 :(得分:0)

您的操作RoutePrefix的{​​{1}}应包含其中一张地图的路线。例如,您可以将地图重新​​定义为GetDashboard()api/RouteOne,然后路线前缀可以是api/RouteTwo。 我希望它有所帮助。