使用Thinktecture Identity Server时保留OAuth2承载令牌

时间:2014-03-14 14:24:39

标签: c# oauth-2.0 thinktecture-ident-server thinktecture-ident-model bearer-token

我一直在关注在http://leastprivilege.com/2012/11/01/oauth2-in-thinktecture-identityserver-v2-resource-owner-password-flow/

找到的OAuth2资源所有者密码流的Thinktecture Identity Server示例

我通过以下过程成功地运行并返回JWT令牌

  1. 使用Thinktecture OAuth2Client检索访问令牌
  2. 从客户端计算机上的“受信任人”存储中检索签名证书
  3. 使用证书并创建新的JwtSecurityTokenHandlerTokenValidationParameters并致电tokenHandler.ValidateToken以获取ClaimsPrincipal
  4. 从这里我获得了授权,但我不确定将令牌保留给进一步请求的最佳方法。我尝试使用

    var sessionToken = new SessionSecurityToken(principal, TimeSpan.FromHour(8));
    FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
    

    但我没有注册SessionAuthenticationModule。我尝试使用“身份和访问”向导来实现此功能,但它对配置进行了许多更改,并尝试为被动身份验证进行设置。

    我可以使用传统的FormsAuthentication cookie(.aspnetAuth),但我记得有人讨论过.FedAuth cookie的一个优点是,如果它的大小太大,它会被自然地分成几个cookie。

    我很难找到一篇能为我完成图片的文章。我需要承载令牌来进一步访问堆栈中的各种API。我已经为SSO /被动身份验证提供了这方面的示例,因为大部分工作都是为您完成的。我只是不确定使用资源所有者密码流时使用的最佳模式。

    所以

    1. 我是否错过了使用Thinktecture身份模型和服务器实现这一目标的更简单方法?
    2. 我应该尝试创建一个FedAuth cookie,以便我可以重用已经为WIF设置的各种Messagehandler / filter组件吗?
    3. 否则 - 将访问令牌简单地放入FormsAuthentication cookie的UserData部分是否有什么特别的错误?

1 个答案:

答案 0 :(得分:0)

尝试查看此问题:WIF Security Token Caching

我相信这段代码可能会

var sessionSecurityToken = new SessionSecurityToken(principal, TimeSpan.FromHours(Convert.ToInt32(System.Web.Configuration.WebConfigurationManager.AppSettings["SessionSecurityTokenLifeTime"])))
{
    IsPersistent = true, // Make persistent
    IsReferenceMode = true // Cache on server
};
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionSecurityToken);