【发布时间】:2014-12-28 00:51:14
【问题描述】:
我们有 OWIN OAuth 2.0 工作(感谢 this fantastic post),但需要更深入地了解在 HTTP 响应中将 ClaimsIdentity 转换为实际 access_token 字符串的实际过程。
我们正在 OAuth 授权提供程序中的这个方法中创建 ClaimsIdentity:
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
// <snip>
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
// validation, user checking code here
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim("role", "user"));
context.Validated(identity);
}
}
当我们将 HTTP POST 请求设为grant_type=password&username=user007&password=jamesbond(放心,这里的密码就可以了),我们得到了 HTTP POST 响应体
{"access_token":"9K8VtOBseU0-XZfdGe2_urn2HESY3jLkpgvowOQFPXsHeWNOrTlTVzfPu35ZEvr4AqSj_b0laesBegtVWuR8R-aItnNXw4vXiuCg0cTNMUKP_yfi89VhD446o2X6ffL8upwZVILpomweSweIVlDmwUDzIwf1ZqubrQ8vuiQDFu-_7vpjPwJ5yVvomQ75agsJWMZk-H_bVWSObds82aM8LCRJwb2bUJchr6_L1GP8xdXqRQz24uDhHvco-XByyMSMzZm-Qo0VVBbocbgP64OJulbihVG_W9e8G69UfbX99pIYiLyE4jixiUtjOKSiMYBISW3_fg","token_type":"bearer","expires_in":1799,"as:client_id":"","userName":"user007",".issued":"Fri, 31 Oct 2014 16:02:05 GMT",".expires":"Fri, 31 Oct 2014 16:32:05 GMT"}
问题:创建实际access_token 字符串的逻辑是什么?
问题中的一些具体问题
-
access_token字符串的内部结构是什么? - 它是加密的还是签名的或两者兼而有之?使用的密钥是什么(假设 IIS/Azure 云服务)?
- 我们如何覆盖生成实际发送出去的字符串的实现,然后在后续访问中检查相同的令牌/字符串?
谢谢
【问题讨论】:
标签: asp.net authentication asp.net-web-api oauth owin