OAuth2规范声明,在使用隐式授权时,授权服务器不得发出刷新令牌。在我们的用例中,我们使用OAuth2保护RESTful API,并使用单页JavaScript应用程序作为此API的客户端。由于在访问令牌过期后重定向到授权服务器将非常困难,因此我们正在寻找更好的方法来获取新的有效令牌。我可以考虑两种不同的方法,并想知道哪一种可能更好:
因此,哪种方法应该优先考虑? 注意:令牌终结点需要客户端身份验证,这仅对像服务器端应用程序这样的机密客户端可能。对于第二种方法,我们只能让RESTful API在我们的情况下作为资源提供者刷新令牌并将其发送回客户端。我认为这将是安全风险。因此,我们可能只有一个有效的方法。
- 使用隐藏的iframe重新请求有效的访问令牌。为此,需要包含一个参数“prompt = none”,它告诉OAuth提供程序既不要挑战身份验证,也不要显示授权页面。如果用户已通过身份验证并已授权应用程序,则服务器将在url的#参数中发送回访问令牌。如果未满足先前的任何条件,则会使用错误重定向,例如#error = authentication%20lost。通过这种行为,我们可以使用短期的访问令牌,也可以使用隐式流。
- 我们可以使用其他范围(例如离线),告诉服务器发放刷新令牌。即使原始规范表示隐式流不发出刷新令牌(如果客户端只是首次授权使用OAuth),您可以自由定义适用于特定应用程序的自己的范围。您应该考虑仅允许来自知名客户端的此范围。
因此,哪种方法应该优先考虑? 注意:令牌终结点需要客户端身份验证,这仅对像服务器端应用程序这样的机密客户端可能。对于第二种方法,我们只能让RESTful API在我们的情况下作为资源提供者刷新令牌并将其发送回客户端。我认为这将是安全风险。因此,我们可能只有一个有效的方法。