首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Owin JwtBearerAuthentication和OAuthAuthorizationServer时未设置当前主体

使用Owin JwtBearerAuthentication和OAuthAuthorizationServer时未设置当前主体
EN

Stack Overflow用户
提问于 2016-03-30 19:07:30
回答 1查看 783关注 0票数 1

我花了相当长的时间研究如何让我的WebApi应用程序使用Owin身份验证模型,因为我希望利用所有的社交媒体登录方法。我当前的问题是理解我在使用Bearer令牌集对调用用户进行身份验证时做错了什么。

我的Startup.Auth已被裁剪回以下内容:

代码语言:javascript
运行
复制
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看起来是这样的:

代码语言:javascript
运行
复制
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感到不安呢?我提出了以下几点:

代码语言:javascript
运行
复制
config.SuppressDefaultHostAuthentication();

虽然我不知道这意味着什么..。

我试图使用一个执行以下操作的集成测试来测试上面的内容:

  1. 创建一个用户
  2. 以该用户的身份登录(正确地接收比勒令牌)
  3. 使用“授权”标头上设置的Bearer令牌进行身份验证调用(在当前主体、HttpContext或OwinContext上没有设置身份验证)

请问我问题,请澄清,这是浪费了我很多时间!非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 19:50:44

事实证明,我的WebApi配置扰乱了身份验证过程。我忽略了其中很重要的一条:

代码语言:javascript
运行
复制
config.Filters.Add(new HostAuthenticationFilter(OAuthBearerOptions.AuthenticationType));

在此之后,身份验证在自己的世界中迅速出现。这个问题之所以出现,主要是因为我试图将OAuth改造成一个没有使用模板设置的WebApi应用程序,而模板本来可以为我完成上述工作。

因此,只需提醒您,在您的WebApi配置中包括两行:

代码语言:javascript
运行
复制
config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthManager.OAuthBearerOptions.AuthenticationType));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36317580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档