10

我目前正在尝试使用以下技术的组合为新应用程序创建基于声明的身份验证的概念证明: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);

我预计 Web API 2 会开始从对 /Token 的调用中返回 JWT,但它似乎没有做任何事情。几天来我一直在努力解决这个问题,但没有成功,而且微软的文档也不是很及时。

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

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

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

任何想法将不胜感激。

4

4 回答 4

6

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

所以,而不是:

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

你应该有:

AccessTokenFormat = new JwtFormat(audience, new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey))
于 2015-03-04T22:01:03.860 回答
5

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

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

于 2015-02-23T21:30:41.697 回答
0

我认为目前没有任何方法可以覆盖令牌在响应中的输出方式。我查看了 Katana源代码存储库中的 OAuthAuthorizationServerHandler 。

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

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

于 2014-06-20T20:21:21.303 回答
-2

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

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

于 2014-03-11T13:16:46.700 回答