【问题标题】:Adding extra details to a webapi bearer token向 webapi 不记名令牌添加额外的详细信息
【发布时间】:2014-03-07 16:53:32
【问题描述】:

我正在尝试学习新的 webapi2.1 身份验证部分。

我已经连接好不记名令牌并使用我的 webapi。我想做的下一件事是能够在令牌中存储一些额外的信息(如果可能的话),所以当客户端发回令牌时,我可以检索详细信息,而无需他们发送多个值。

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

对不起,如果这个问题有点含糊,但我已经四处寻找,似乎找不到任何进一步的信息

谢谢

【问题讨论】:

    标签: authentication asp.net-web-api


    【解决方案1】:

    由于令牌是使用“秘密”密钥签名的 - 只有发行者才能向其添加数据。

    在您的 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));
        }
    

    【讨论】:

    • 感谢您的解释。我已经将您的示例添加到我的项目中,但是它不知道 app.UseClaimsTransformation(TransformClaims); UseClaimsTransformation - 这是在哪个命名空间中?
    • 对不起,我没有引用 thinktecture 包
    • 啊抱歉最后一个问题。是否可以为每个请求添加自定义声明值,而不是为每个声明插入静态数据?我有一个包含企业的应用程序,我想将人员 businessId 存储为声明
    • 是的,绝对是 - 想法是您分析传入的身份并创建一个包含应用程序/业务特定声明的新身份。
    • 我知道这已经快一年了,但我必须做类似的事情——但不是在应用程序启动时。当用户登录时,他们会被带到一个页面以在下拉列表中选择一个“租户”。我希望将该租户 ID 作为声明保存在不记名令牌中……但此时令牌已创建。这可能吗?
    猜你喜欢
    • 2015-09-11
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多