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

bug*_*ker 3 asp.net oauth owin katana

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

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

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

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

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

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

提前致谢!

Tai*_*deh 5

您可以将其存储在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);
Run Code Online (Sandbox Code Playgroud)

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

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