OAuth 2.0记住授权授权

时间:2017-09-01 13:44:52

标签: oauth authorization grant authorize

This example by Microsoft介绍了如何实施OAuth 2.0授权服务器。我正在实施授权代码授权流程。在下载的示例代码中, / authorize端点每次都要求用户在登录时授予权限。由于用户只想在首次登录时授予一次权限,我是否应该自己保留权限用户或默认情况下是否支持OAuth?

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

OAuth 2.0规范本身并未提及有关该功能的任何内容。因此,如果您使用的授权服务器的实现没有该功能,您自己必须实现它。

要实现此功能,您需要存储有关“who(用户)已为每个用户和客户端应用程序组合授予哪些权限(范围)(客户端应用程序)”的信息。此外,即使在发给每个组合的所有访问令牌都已过期之后,您可能仍希望保留信息,以避免再次询问用户。

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

<小时/> 供参考:

Granted Scopes API的“Authlete”就是一个例子。 /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请求参数,并删除记住的记录(如果有)。

请注意,Granted Scopes API仅适用于专用的Authlete服务器。它不适用于共享的Authlete服务器(api.authlete.com)。这是因为如果API调用者没有根据需要调用/api/client/granted_scopes/delete API,垃圾记录可能会累积,而这样的垃圾记录会浪费共享存储。