2014-03-05 51 views
8

我目前正在尝试使用以下技术组合的新的应用程序创建一个概念证明索赔基于身份验证:网络API 2,OWIN中间件和智威汤逊。修改OWIN OAuth的中间件使用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将开始从调用/返回令牌JWTs,但它不会出现有做了什么。我一直在抨击我的头几天没有成功,微软的文件并不是很成功。

我也尝试添加以下到我的OAuthAuthorizationServerOptions

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

我也可以尝试做完全错误的事情。

任何想法将不胜感激。

+0

我目前在创造我自己的ISecureDataFormat 的过程,并在分配给AccessTokenFormat –

+0

你是否有工作找出一种方法来改变使用您自己的自定义ISecureDataFormat实现来发布JWT? – Lukie

+0

你有没有解决过这个问题?我现在开始着眼于做同样的事情。 – ChrisC

回答

0

我不认为有覆盖令牌是如何在响应输出电流的任何方式。我看了一下Katana source code repository中的OAuthAuthorizationServerHandler。

你会看到,在InvokeTokenEndpointAsync方法,是创建一个JsonTextWriter产生响应的部分。这不是以任何形式的延伸会影响它的方式来完成的。

我也觉得很沮丧。微软的库应该有一些方法来轻松覆盖响应序列化。你甚至无法将自己的自定义参数添加到响应中。

2

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

然而,在Windows身份验证基础,智威汤逊2014微软正式发布支持下半年,随着JSON Web Token Handler。您应该能够安装并使用该软件包来解决您所描述的问题。

5

好了,现在有上OAuthAuthorizationServerOptions,你可以指定你的访问令牌的格式,而不是授权码,就像你对你做例子的设置。

因此,而不是:

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

你应该有:

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