Spring oauth2中授权终结点未附带刷新令牌

Spring oauth2中授权终结点未附带刷新令牌,spring,oauth,oauth-2.0,Spring,Oauth,Oauth 2.0,我试图在授权用户时获取刷新令牌 这是用于授权的url 请求 https://...../oauth2/authorize?response_type=token&client_id=test-client&scope=all&redirect_uri=https%3A%2F%2Flocalhost:7002%2F...%2Foauth curl --data 'grant_type=password&username=....&password=...'

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

这是用于授权的url

请求

https://...../oauth2/authorize?response_type=token&client_id=test-client&scope=all&redirect_uri=https%3A%2F%2Flocalhost:7002%2F...%2Foauth
curl --data 'grant_type=password&username=....&password=...' --basic --user 'test-client:client-secret' 'https://....../oauth2/token'
使用令牌等重定向url:

https://localhost:7002/..../oauth#access_token=b3961289-713c-41c9-9341-253286cbcc52&token_type=bearer&expires_in=300&scope=all
但是这个没有任何刷新令牌。我用令牌endpont尝试了这个,它有这样的刷新令牌

请求

https://...../oauth2/authorize?response_type=token&client_id=test-client&scope=all&redirect_uri=https%3A%2F%2Flocalhost:7002%2F...%2Foauth
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"
}
我是否可以在授权端点中获取刷新令牌?或
我可以使用现有令牌获取刷新令牌吗?

这需要很长时间才能得到评论

这在某种程度上取决于身份验证服务器的工作方式。某些服务器仅在用户第一次进行身份验证时返回刷新令牌

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

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

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}
这是获取刷新令牌的唯一方法,因此您不能使用其他令牌请求获取刷新令牌

隐式客户端


在隐式授权流中,客户端通过“用户代理”(即用户坐在那里的浏览器)请求访问资源。因此,客户机想要获取某些内容,但需要用户为其输入权限。如果身份验证服务器提供了一个刷新令牌,那么客户端可以在将来跳过向用户请求权限的过程,并永远授予自己访问权限(本质上是在没有用户权限的情况下随时刷新其令牌)。这在流中是禁止的,因为“不受信任的”客户端应该只有通过让用户输入其凭据(因此只有在资源所有者允许的情况下)才具有访问权限。

使用隐式授权时,您无法获得刷新令牌

我猜你的应用程序是一个单页应用程序?i、 e.在用户浏览器中运行的html/JavaScript。这是目前隐式授权的主要用例


如果不是SPA(例如本机、移动或web应用程序),您应该能够使用不同的授权类型,这将为您提供刷新令牌。e、 g.授权代码授权或带有PKCE授权的授权代码。

我已通过重定向实现了单点登录。我使用隐式授权而不是授权代码授权。现在我明白了为什么他们不为刷新令牌提供授权。我认为,它应该是安全的,因为如果它暴露在外部,它们可以不断刷新令牌。这样它就永远不会过期。根据我的要求,我必须使用隐式授权。有关详细信息,我使用的是response_type=token。IIR隐式客户端通常不会返回刷新令牌。您对隐式授权类型的解释非常容易理解。