2014-02-10 67 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作爲一個索賠 –

相關問題