我花了相当长的时间研究如何让我的WebApi应用程序使用Owin身份验证模型,因为我希望利用所有的社交媒体登录方法。我当前的问题是理解我在使用Bearer令牌集对调用用户进行身份验证时做错了什么。
我的Startup.Auth已被裁剪回以下内容:
OAuthManager.OAuthBearerOptions = new OAuthBearerAuthenticationOptions();
OAuthManager.OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth/token"),
AuthorizeEndpointPath = new PathString("/oauth/externallogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromHours(1),
AccessTokenFormat = new MyJwtFormat(),
Provider = new MyOAuthServerProvider(),
};
app.UseOAuthAuthorizationServer(OAuthManager.OAuthServerOptions);
app.UseJwtBearerAuthentication(new MyJwtBearerOptions());MyOAuthServerProvider看起来是这样的:
public class OAuthServerProvider : OAuthAuthorizationServerProvider
{
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var result = base.GrantResourceOwnerCredentials(context);
return result;
}
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
return Task.FromResult(true);
}
}问题1:当我用授权头中设置的Bearer令牌调用服务时,上面的代码是否都是我所需要的?这是放置Jwt的正确位置吗?象征性的形式应该是'Bearer ey.‘等等,我相信。
问题2:调用方是否应该将Bearer令牌放置在呼叫或其他位置的“授权”标头中?
问题3:为什么在上面的代码已经到位的情况下,我的OAuthServerProvider永远不会被任何一种方法击中?是什么让自己的认证系统说‘稍等一下,我们有一个授权头,所以我应该处理’我的客户应该做什么不同?
我的WebApiConfig是否有可能让自己的OAuth感到不安呢?我提出了以下几点:
config.SuppressDefaultHostAuthentication();虽然我不知道这意味着什么..。
我试图使用一个执行以下操作的集成测试来测试上面的内容:
请问我问题,请澄清,这是浪费了我很多时间!非常感谢你的帮助。
发布于 2016-04-04 19:50:44
事实证明,我的WebApi配置扰乱了身份验证过程。我忽略了其中很重要的一条:
config.Filters.Add(new HostAuthenticationFilter(OAuthBearerOptions.AuthenticationType));在此之后,身份验证在自己的世界中迅速出现。这个问题之所以出现,主要是因为我试图将OAuth改造成一个没有使用模板设置的WebApi应用程序,而模板本来可以为我完成上述工作。
因此,只需提醒您,在您的WebApi配置中包括两行:
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthManager.OAuthBearerOptions.AuthenticationType));https://stackoverflow.com/questions/36317580
复制相似问题