0

我有一个简单的 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 控制器来接受令牌。

任何有关解决此问题的帮助将不胜感激。

谢谢

4

1 回答 1

0

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

于 2016-01-15T08:13:20.803 回答