2014-02-10 70 views
2

我正在尝试学习新的webapi2.1验证片段。向webapi不记名令牌添加额外的详细信息

我得到了不记名令牌,并与我的webapi一起工作。我希望做的下一件事是能够在令牌中存储一些附加信息(如果可能的话),所以当客户端发回令牌时,我可以检索到详细信息而无需发送多个值。

令牌是否可以扩展以包含自定义数据?

很抱歉,如果这个问题是有点含糊,但我已经绕了个大追捕,似乎无法找到任何进一步的信息

谢谢

回答

3

由于令牌有一个“秘密”签订密钥 - 只有发行者可以向其添加数据。

在您的Web API中接收到令牌后,您可以修改索赔集的内容 - 这称为索赔转换。

我这里有它的一个样本: https://github.com/thinktecture/Thinktecture.IdentityModel/tree/master/samples/OWIN/AuthenticationTansformation

在本质上你正在编写一些代码,检查传入令牌和添加应用程序特定权利所得到的本金。

// Transform claims to application identity 
    app.UseClaimsTransformation(TransformClaims); 

    private Task<ClaimsPrincipal> TransformClaims(ClaimsPrincipal incoming) 
    { 
     if (!incoming.Identity.IsAuthenticated) 
     { 
      return Task.FromResult<ClaimsPrincipal>(incoming); 
     } 

     // Parse incoming claims - create new principal with app claims 
     var claims = new List<Claim> 
     { 
      new Claim(ClaimTypes.Role, "foo"), 
      new Claim(ClaimTypes.Role, "bar") 
     }; 

     var nameId = incoming.FindFirst(ClaimTypes.NameIdentifier); 
     if (nameId != null) 
     { 
      claims.Add(nameId); 
     } 

     var thumbprint = incoming.FindFirst(ClaimTypes.Thumbprint); 
     if (thumbprint != null) 
     { 
      claims.Add(thumbprint); 
     } 

     var id = new ClaimsIdentity("Application"); 
     id.AddClaims(claims); 

     return Task.FromResult<ClaimsPrincipal>(new ClaimsPrincipal(id)); 
    } 
+0

谢谢您的解释。我已经把你的例子,并将其添加到我的项目,但它不知道app.UseClaimsTransformation(TransformClaims); UseClaimsTransformation - 这是什么名字空间? –

+0

对不起,我没有思考包引用 –

+0

啊对不起,最后一个问题。为每个请求插入静态数据,而不是为每个请求添加自定义声明值?我有一个包含商家的应用程序,并且我想将个人businessId作为一个索赔 –

相关问题