当前位置: 首页 > 知识库问答 >
问题:

坏令牌 没有刷新令牌 在 spotify api 上

法池暝
2023-03-14

我正在使用spotify API制作应用程序,当我尝试获取访问令牌和刷新令牌时,我有一个问题。在json响应中,我没有任何刷新令牌,并且给定的访问令牌不起作用(与我直接在spotify网站上获得的令牌相比太短了。如果您发现上面有问题,请告诉我(斑点阿比基于Oauth2.0)

这是我的代码


        try {
            String urlString = "https://accounts.spotify.com/api/token?";

            URL website = new URL(urlString);

            HttpURLConnection connection = (HttpURLConnection) website.openConnection();
            connection.setRequestMethod("POST");


            // Headers
            connection.setRequestProperty("Accept", "application/json");
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            connection.setDoOutput(true);

            // Add parameters to the body
            HashMap<String, String> params = new HashMap<>();
            params.put("grant_type", "client_credentials");
            params.put("redirect_uri", ID.REDIRECT_URI);
            params.put("code", code);
            params.put("client_id", ID.CLIENT_ID);
            params.put("client_secret", ID.CLIEN_SECRET_ID);

            OutputStream os = connection.getOutputStream();
            BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, StandardCharsets.UTF_8));
            writer.write(getPostDataString(params));
            writer.flush();
            writer.close();
            os.close();

            // Open the connection
            connection.connect();

            JsonObject jsonResponse  = Http.statusResponse(connection);

            // Close the connection
            connection.disconnect();

            System.out.println(jsonResponse);
            return jsonResponse;


        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

这就是我得到的:

{"access_token":"BQ A Qx zM F Iq OY 2 v k 9 a Win tAg Oil aY 77 N 6 s-xL 2 ny HmV zW Msn u 4 t 3 wm vG J-EK_2MDMXvniBEeYoydvbYZpxOY","token_type":"承运人","expires_in": 3600}

这就是我应该得到的(基于spotify指南:https://developer.spotify.com/documentation/general/guides/authorization/code-flow/)

{ “access_token”: “NgCXRK...MzYjw“, ”token_type“: ”持有者“, ”范围“: ”用户-读-私人用户-读-电子邮件“, ”expires_in“: 3600, ”refresh_token“: ”NgAagA...Um_SHo“ }

共有1个答案

姬银龙
2023-03-14

您的grant_type参数应该是authorization_codeclient_credentials。client_credentials授权类型不授予对授权范围的访问权限。

因此,请使用params。put(“授权类型”,“授权代码”)

希望有所帮助!

 类似资料:
  • 我面临一个问题,以刷新谷歌访问令牌在服务器端。 我从谷歌认证服务器得到的响应只是403状态代码。信息是这样的 仅仅为了刷新访问令牌,在我的服务器上使用SSL是强制性的吗?它已经在我的本地服务器上测试过,没有附加任何SSL到它。

  • 授权服务器可以给Web应用客户端和本机应用程序客户端颁发刷新令牌。 刷新令牌在传输和储存时必须保持机密性,并只与授权服务器和刷新令牌被颁发的客户端共享。授权服务器必须维护刷新令牌和它被颁发给的客户端之间的绑定。刷新令牌必须只能使用带有RFC2818定义的服务器身份验证的1.6所述的TLS 传输。 授权服务器必须验证刷新令牌和客户端身份之间的绑定,无论客户端身份是否能被验证。当无法进行客户端身份验证

  • 刷新令牌是用于获取访问令牌的凭据。刷新令牌由授权服务器颁发给客户端,用于在当前访问令牌失效或过期时,获取一个新的访问令牌,或者获得相等或更窄范围的额外的访问令牌(访问令牌可能具有比资源所有者所授权的更短的生命周期和更少的权限)。颁发刷新令牌是可选的,由授权服务器决定。如果授权服务器颁发刷新令牌,在颁发访问令牌时它被包含在内(即图1中的步骤D)。 刷新令牌是一个代表由资源所有者给客户端许可的授权的字

  • 我对oauth2中的刷新令牌有点困惑。如它所说的访问令牌限制了黑客可以使用用户凭证的1小时的时间窗口,刷新令牌是万岁令牌,可以用来重新创建访问令牌。 我很困惑,如果有人从cookie中窃取了访问令牌,他也可以窃取刷新令牌,并可以使用刷新令牌创建新的访问令牌,因为我在JQuery中有ajax请求(客户端)

  • 我不熟悉,它代表。我混淆了它的两个术语:访问令牌和刷新令牌。 用户注册/登录站点后,我创建和。 将刷新标记保存在数据库或cookie中。 15分钟后,用户标记访问令牌过期。 如果用户空闲2小时,我将从cookie或DB中删除刷新令牌,否则我将使用刷新令牌续订访问令牌。 有什么优化的方法可以达到这个目的吗?

  • 我已经阅读了JWT和访问令牌和刷新令牌。我知道您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。 我不清楚三件事: 谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期?(显然刷新令牌也需要过期,尽管需要更长的时间才能过期)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。在某些情况下(移动应用)