2017-09-01 120 views
1

This example by Microsoft描述了实现OAuth 2.0授权服务器。我正在执行授权代码授权流程。在下载的示例代码中,/授权端点每次都要求用户在登录时授予权限。由于用户希望在第一次登录时只授予一次权限,我应该自己为每个用户持久保留还是支持OAuth这是默认的?OAuth 2.0记得授权许可

这种情况下的最佳做法是什么?

在此先感谢。

回答

0

OAuth 2.0规范本身并未提及有关该功能的任何内容。因此,如果您正在使用的授权服务器的实施不具备该功能,那么您自己必须实施该功能。

为了实现该功能,你需要存储有关“谁(用户)已授予哪些权限(范围)给谁(客户端应用程序)”为用户和客户端应用程序的每个组合。另外,为了避免再次询问用户,在向每个组合发出的所有访问令牌都已过期之后,可能还是希望保留这些信息。

如果我是你,我会添加一个内部API到授权服务器。 API将接收用户标识和客户端标识,并返回用户过去已授予客户端应用程序的范围列表。如果有这样一个API,您可以在生成授权页面时使用它。


供参考:

Authlete的 “Granted Scopes API” 就是一个例子。 /api/client/granted_scopes/get API接受subjectclientId请求参数并返回如下所示的JSON。

{ 
    "serviceApiKey"  : <Service API Key>, 
    "clientId"   : <Client ID>, 
    "subject"    : <User's Unique ID>, 
    "latestGrantedScopes" : <Scopes granted by the last authorization process>, 
    "mergedGrantedScopes" : <All the scopes granted so far>, 
} 

/api/client/granted_scopes/delete API接受subjectclientId请求参数,并删除记录记住如果有的话。

请注意,授予的范围API仅适用于专用的Authlete服务器。它在共享的Authlete服务器(api.authlete.com)上不起作用。这是因为如果API调用者根据需要不调用/api/client/granted_scopes/delete API,垃圾记录可能会累积,并且此类垃圾记录会浪费共享存储。