我目前正在研究iPad应用程序需要访问现有Web应用程序的项目。 iPad应用程序已在内部开发,因此是值得信赖的应用程序。但是,Web应用程序提供的数据非常敏感,所以我们不希望将客户端凭据存储在iPad上。我们还希望在不影响普通用户访问的情况下撤消iPad访问权限。dotnetopenauth - 如何在刷新令牌中添加额外的数据?
鉴于上述情况,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);
}
这不正是我们想要的访问令牌但不包括在同一“而额外”当访问令牌过期并且需要刷新时导致问题的刷新令牌,因为我们实际上丢失了附加数据(因为旧访问令牌被丢弃)。
任何人都可以建议是否有可能以类似的方式访问令牌填充当前DotNetOpenAuth版本中的刷新令牌“ExtraData”?
对不起,我的问题是误导 - 额外的数据实际上来自授权服务器,并且当客户端发出请求时,资源服务器需要额外的数据。客户不知道额外的数据。我编辑了这个问题来澄清。然而,从您的第一条评论来看,似乎无论如何都是不可能的。请让我知道如果是这种情况,我会将此标记为例外答案 – lawst
是否可以在CreateAccessToken方法中确定用户名?我已经检查过我们的代码,如果我们能够在创建访问令牌时确定用户,我们可以避免刷新令牌中的额外数据。 – lawst
没错。这是不可能的。很高兴听到您所需要的只是访问授权用户。这只是一个疏忽,“CreateAccessToken”将该参数留出。它会[很快解决](https://github.com/DotNetOpenAuth/DotNetOpenAuth/issues/219)。 –