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

Jam*_*van 10 c# jwt owin asp.net-web-api2

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

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

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

    app.UseJwtBearerAuthentication(jwtOptions);
Run Code Online (Sandbox Code Playgroud)

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

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

AuthorizationCodeFormat = new JwtFormat(audience, new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey))
Run Code Online (Sandbox Code Playgroud)

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

任何想法将不胜感激.

Joã*_*lva 6

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

所以,而不是:

AuthorizationCodeFormat = new JwtFormat(audience, new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey))
Run Code Online (Sandbox Code Playgroud)

你应该有:

AccessTokenFormat = new JwtFormat(audience, new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey))
Run Code Online (Sandbox Code Playgroud)


sfu*_*qua 5

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

然而,在 2014 年下半年,微软正式发布了在 Windows Identity Foundation 中对 JWT 的支持,以及JSON Web Token Handler。您应该能够安装并使用该软件包来解决您所描述的问题。


Sar*_*yan -2

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

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