刷新令牌不在oauth2中的授权端点

时间:2018-04-10 09:02:58

标签: spring oauth oauth-2.0

我在授权用户时尝试获取刷新令牌。

这是用于授权的网址。

请求

https://...../oauth2/authorize?response_type=token&client_id=test-client&scope=all&redirect_uri=https%3A%2F%2Flocalhost:7002%2F...%2Foauth

使用令牌等重定向网址:

https://localhost:7002/..../oauth#access_token=b3961289-713c-41c9-9341-253286cbcc52&token_type=bearer&expires_in=300&scope=all

但是没有任何刷新令牌。我用令牌endpont尝试了这个,它有像这样的刷新令牌

请求

curl --data 'grant_type=password&username=....&password=...' --basic --user 'test-client:client-secret' 'https://....../oauth2/token'

响应

{  
   "scope":"all",
   "access_token":"5a90edb7-5ded-451a-9d9b-d3bd879ac336",
   "token_type":"bearer",
   "expires_in":300,
   "refresh_token":"ec0c94db-5e81-4229-a815-9c2d80086995"
}

无论如何,我可以在授权端点获得刷新令牌。 ?要么 我可以使用现有令牌获取刷新令牌吗?

2 个答案:

答案 0 :(得分:1)

这需要很长时间才能发表评论

这取决于身份验证服务器的工作原理。某些服务器仅在用户首次进行身份验证时返回刷新令牌。

要获取刷新令牌,您必须在通过授权端点发起身份验证请求时包含offline_access范围。

例如,如果您使用授权代码授予,则身份验证请求将如下所示:

https://__AUTH0_NAMESPACE__/authorize?
    audience={API_AUDIENCE}&
    scope=offline_access&
    response_type=code&
    client_id=__AUTH0_CLIENT_ID__&
    redirect_uri=__AUTH0_CALLBACK__&
    state={OPAQUE_VALUE}

这是获取刷新令牌的唯一方法,因此您无法使用其他令牌请求获取刷新令牌。

隐含客户

在隐式授权流程中,客户端通过用户代理&#34 ;,即用户坐在那里的浏览器请求访问资源。所以客户想要抓住一些东西,但需要用户为其输入权限。如果身份验证服务器提供了刷新令牌,则客户端可能会在将来跳过向用户请求权限并永久授予自己访问权限(基本上在没有用户权限的情况下刷新其令牌)。这在流程中是被禁止的,因为"不信任"客户端应该只能通过让用户输入他们的凭证来访问(因此只有当资源所有者允许时才这样做。)

答案 1 :(得分:1)

使用隐式授权时无法获取刷新令牌。

我认为您的应用程序是单页应用程序?即在用户的浏览器中运行的html / JavaScript。这是现今Implicit授权的主要用例。

如果它不是SPA(例如本机,移动或Web应用程序),您应该能够使用不同的授权类型,它将为您提供刷新令牌。例如授权代码授予或授权代码与PKCE Grant。