【发布时间】:2016-04-05 16:40:28
【问题描述】:
我花了相当多的时间研究让我的 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 是我在使用 Authorization 标头中设置的 Bearer 令牌调用服务时所需要的全部代码吗?这是放置此 Jwt 的正确位置吗?令牌的形式应该是“Bearer ey.....”等我相信。
问题 2 调用者是否应该将 Bearer 令牌放置在调用的“授权”标头中或其他位置?
问题 3 为什么有了上面的代码,我的 OAuthServerProvider 永远不会受到任何一种方法的影响?是什么让 Owin 身份验证系统说“等一下,我们有一个 Authorization 标头,所以我应该处理它”我的客户应该做些什么不同的事情?
我的 WebApiConfig 可能会扰乱 Owin OAuth 吗?我设置了以下内容:
config.SuppressDefaultHostAuthentication();
虽然我不确定我是否理解这意味着什么......
我正在尝试使用执行以下操作的集成测试来测试上述内容:
- 创建用户
- 以该用户身份登录(正确接收 Bearer 令牌)
- 使用在“授权”标头上设置的承载令牌进行经过身份验证的调用(当前主体、HttpContext 或 OwinContext 上未设置身份验证)
请向我提问以进行澄清,这会花费我很多时间!非常感谢您的帮助。
【问题讨论】:
标签: c# authentication oauth-2.0 owin bearer-token