在使用Thinktecture身份服务器时持久化OAuth2承载令牌

本文关键字:OAuth2 持久化 令牌 服务器 Thinktecture 身份 | 更新日期: 2023-09-27 17:50:13

我一直遵循在http://leastprivilege.com/2012/11/01/oauth2-in-thinktecture-identityserver-v2-resource-owner-password-flow/找到的OAuth2资源所有者密码流的Thinktecture身份服务器示例

我让示例通过以下过程成功地工作并返回JWT令牌

  1. 使用Thinktecture OAuth2Client检索访问令牌
  2. 从客户端计算机上的"受信任人员"存储中检索签名证书
  3. 使用证书并创建新的JwtSecurityTokenHandlerTokenValidationParameters并调用tokenHandler.ValidateToken以获得claimprincipal

从这里我被授权,但我不确定为进一步的请求持久化令牌的最佳方法。我试着用

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设置的各种消息处理程序/过滤器组件吗?
  3. 否则-有什么特别错误的简单地把访问令牌在UserData部分的FormsAuthentication cookie?

在使用Thinktecture身份服务器时持久化OAuth2承载令牌

试着看看这个问题:WIF安全令牌缓存。

我相信这段代码可能会做

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);