use*_*446 6 c# jwt identityserver3
我将令牌作为字符串传递到 SOAP 服务中,并已验证令牌有效。我现在有一个 SecurityToken,在调试模式下我可以看到所有声明,特别是我想传递给另一个方法的 userId 声明。我似乎无法弄清楚如何获得索赔。现在我解码了令牌的字符串版本(令牌的未验证字符串版本,我至少等到验证成功之后。)这是代码块:
SecurityToken validatedToken = null;
if (VerifyToken(sPassword, ref response, ref validatedToken))
{
var claimsObj = JObject.Parse(Encoding.UTF8.GetString(Base64Url.Decode(claims)));
JToken userId = claimsObj.GetValue("userId");
return implClass.Process(userId);
}
Run Code Online (Sandbox Code Playgroud)
如何从 SecurityToken 中获取声明?
validatedToken.Id; // not it
validatedToken.ToClaimsPrincipal(cert); // doesn't work
Run Code Online (Sandbox Code Playgroud)
就公开的属性而言,对我来说似乎没有其他希望,但由于我可以在调试器中看到声明,我确信有一种我没有看到的方法。
Eri*_*lan 11
我刚刚经历了同样的事情,即在调试时,在 SecurityToken 上可以看到 Payload 属性,但在编辑代码时似乎没有 Payload 属性。
看起来SecurityToken 的底层类型是JwtSecurityToken(尽管securityCode.GetType() 的QuickWatch 返回SecurityToken,而不是JwtSecurityToken。)。无论如何,转换为实际的底层类型并引用 Payload 集合对我来说很有效。
一种解决方案:
string userId = ((JwtSecurityToken)access_token).Payload["userId"].ToString();
Run Code Online (Sandbox Code Playgroud)
您看到这些声明可能是因为调试器使用的是对象的真实类型,而不是 SecurityToken 基类。将其转换为真实类型,您应该可以更轻松地访问声明。
或者使用 securityTokenHAndler 来验证并检索声明集合。
归档时间: |
|
查看次数: |
4697 次 |
最近记录: |