首页 文章

修改OWIN OAuth中间件以使用JWT承载令牌

提问于
浏览
8

我目前正在尝试使用以下技术的组合为新应用程序创建基于声明的身份验证的概念验证:Web API 2,OWIN中间件和JWT .

为了简单起见,我从Web API 2项目模板开始,将身份验证更改为“个人用户帐户” . 我创建的示例客户端然后能够通过调用/ Token获取令牌,并且能够使用OAuth承载令牌调用示例 endpoints . 到现在为止还挺好 . 然后我将以下代码添加到Startup.Auth.cs以尝试启用JwtBearerAuthentication:

var jwtOptions = new JwtBearerAuthenticationOptions
    {
        AllowedAudiences = audiences,
        IssuerSecurityTokenProviders = new[] { 
            new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey) }
    };

    app.UseJwtBearerAuthentication(jwtOptions);

我预计Web API 2会从调用/ Token开始返回JWT,但它似乎没有做任何事情 . 几天来我一直在反对这一点,没有成功,微软的文件也不是很快 .

我还尝试将以下内容添加到OAuthAuthorizationServerOptions中

AuthorizationCodeFormat = new JwtFormat(audience, new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey))

我也可能试图做完全错误的事情 .

任何想法将不胜感激 .

4 回答

  • 5

    您可以使用此示例https://github.com/thinktecture/Thinktecture.IdentityModel/tree/master/samples/OAuth2/EmbeddedResourceOwnerFlow

    用于在项目中写入身份验证逻辑 . 之后,您必须为每个需要授权的控制器或操作添加[Authorize]属性(OWIN Katana包含验证令牌,授权和其他一些有用的东西的逻辑) .

  • 4

    那么,现在 OAuthAuthorizationServerOptions 上有一个设置,您可以指定访问令牌的格式,而不是授权代码,就像您在做的那样 .

    所以,而不是:

    AuthorizationCodeFormat = new JwtFormat(audience, new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey))
    

    你应该有:

    AccessTokenFormat = new JwtFormat(audience, new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey))
    
  • -2

    Windows Identity Foundation使用专有令牌格式,而不是JWT . 您在上面看到的JWT代码用于消耗令牌,而不是生成令牌 . 关于ASP.NET forums有一个有用的讨论 .

    但是,在2014年下半年,微软正式发布了对Windows身份基础JWT的支持,其中包括JSON Web Token Handler . 您应该能够安装和使用该软件包来解决您所描述的问题 .

  • 0

    我没有't think there'以任何当前的方式来覆盖令牌在响应中的输出方式 . 我看了一下Katana source code repository中的OAuthAuthorizationServerHandler .

    您将在InvokeTokenEndpointAsync方法中看到,有一个部分创建了一个生成响应的JsonTextWriter . 它不是以任何类型的扩展都会影响它的方式完成的 .

    我觉得这也令人沮丧 . 微软的库应该有一些方法可以轻松覆盖响应序列化 . 您甚至无法将自己的自定义参数添加到响应中 .

相关问题