首页 文章

如何使用OWIN在承载/访问令牌中定义clientID(或其他数据)

提问于
浏览
2

我试图找出如何将clientID(或我可能需要的任何其他数据)放在承载/访问令牌中 .

我正在使用OWIN OAuth来创建令牌 . 我可以向身份凭证添加声明,然后将其标记/序列化到令牌中并传递回客户端 .

然后客户端调用受保护的API,并且API反序列化令牌并为用户设置IPrinciple . 此标识对象包含用户名和ClaimsIdentity中的范围 .

我想获得其他信息,例如首先发出获取令牌请求的clientID .

我可以把这些数据放在索赔中;这显然有效,但它是一个黑客 .

我已经做了很多搜索,如果可能的话,我不确定如何在承载/访问令牌中存储额外的数据 .

提前致谢!

1 回答

  • 4

    您可以将其存储在 AuthenticationProperties 对象中,如下代码所示:

    var props = new AuthenticationProperties(new Dictionary<string, string>
                {
                    { 
                        "as:client_id", (context.ClientId == null) ? string.Empty : context.ClientId
                    },
                    { 
                        "userName", context.UserName
                    }
                });
    
            var ticket = new AuthenticationTicket(identity, props);
    

    要读取它,您需要取消保护令牌,如下面的代码,然后从故障单中读取属性 . 我没有找到直接的方法来创建令牌而不传递令牌,我知道这不是最终的答案,但它可能有所帮助 .

    string token = "TOKEN GOES HERE";
     Microsoft.Owin.Security.AuthenticationTicket ticket = Startup.OAuthBearerOptions.AccessTokenFormat.Unprotect(token);
    

相关问题