我目前正在处理一个 iPad 应用程序需要访问现有 Web 应用程序的项目。iPad 应用程序是内部开发的,因此是值得信赖的应用程序。然而,Web 应用程序提供的数据是敏感的,因此我们不想将客户端凭据存储在 iPad 上。我们还希望能够在不影响常规用户访问的情况下撤销 iPad 访问。
鉴于上述情况,OAuth2 资源所有者密码凭证授权/流程非常适合我们的要求,自从 DotNetOpenAuth 已建立库以来,我们已经使用它实现了这一要求。
但是,我们现在需要将一些元数据添加到资源服务器的访问和刷新令牌中。授权服务器通过 AuthorizationServerAccessToken.ExtraData 属性在我们的 IAuthorizationServerHost.CreateAccessToken 方法的实现中添加元数据:
public AccessTokenResult CreateAccessToken(IAccessTokenRequest accessTokenRequestMessage)
{
var accessToken = new AuthorizationServerAccessToken();
// Add some extra data to access token
accessToken.ExtraData.Add("server_parameter1", this.ServerValue1);
accessToken.ExtraData.Add("server_parameter2", this.ServerValue2);
// Set ResourceServerEncryptionKey properties etc
return new AccessTokenResult(accessToken);
}
这正是我们想要的访问令牌,但是刷新令牌中不包含相同的“ExtraData”,这会在访问令牌过期并需要刷新时导致问题,因为我们实际上丢失了额外的数据(因为旧的访问令牌被丢弃)。
任何人都可以建议是否可以在当前版本的 DotNetOpenAuth 中以与访问令牌类似的方式填充刷新令牌“ExtraData”?