我想将我们的WebAPI应用程序作为IIS中的虚拟应用程序运行,但我无法使用身份验证。我不知道TokenEndpointPath
中的OAuthAuthorizationServerOptions
可以使用什么来成功登录。
目前,虚拟应用程序路径为/app
,因此我认为TokenEndpointPath = new PathString("/app/token")
可能有效。但它返回404.当我发布到/token
时,仅使用/app/token
也会返回404。
如何配置OAuth服务器以回答我的令牌请求?
答案 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);
}
}
});
}