在虚拟应用程序下运行ASP.NET OAuth服务器将返回404 for / token

时间:2015-11-24 12:01:21

标签: asp.net asp.net-web-api oauth virtual-directory

我想将我们的WebAPI应用程序作为IIS中的虚拟应用程序运行,但我无法使用身份验证。我不知道TokenEndpointPath中的OAuthAuthorizationServerOptions可以使用什么来成功登录。

目前,虚拟应用程序路径为/app,因此我认为TokenEndpointPath = new PathString("/app/token")可能有效。但它返回404.当我发布到/token时,仅使用/app/token也会返回404。

如何配置OAuth服务器以回答我的令牌请求?

1 个答案:

答案 0 :(得分:0)

我所说的是我认为你必须注册发行人(代币服务器)。请注意"发行人"在资源服务器中匹配auth服务器中的AccessTokenFormat。它验证令牌实际上来自该域。我不确定如何通过虚拟路径传递验证。

//Auth server
public void ConfigureOAuth(IAppBuilder app)
{
    OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
    {
        AllowInsecureHttp = true,
        TokenEndpointPath = new PathString("/oauth2/token"),
        AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
        Provider = new CustomOAuthProvider(),
        AccessTokenFormat = new CustomJwtFormat("http://yourHostName")
    };

   // OAuth 2.0 Bearer Access Token Generation
   app.UseOAuthAuthorizationServer(OAuthServerOptions);
}

//Resource server (API)
public void ConfigureOAuth(IAppBuilder app)
{
    var issuer = "http://yourHostName";
    var audience = "00000000000000000000000";
    var secret = TextEncodings.Base64Url.Decode("yourSecret");

    app.UseJwtBearerAuthentication(
    new JwtBearerAuthenticationOptions
    {
        AuthenticationMode = AuthenticationMode.Active,
        AllowedAudiences = new[] { audience },
        IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
        {
            new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
        },
        Provider = new OAuthBearerAuthenticationProvider
        {
            OnValidateIdentity = context =>
            {
                context.Ticket.Identity.AddClaim(new System.Security.Claims.Claim("newCustomClaim", "newValue"));
                return Task.FromResult<object>(null);
            }
        }
    });
}