我正在尝试对客户端凭据流进行身份验证,但一直返回错误400。我查看了可用的API,但看不出我做错了什么。如果有人能给我一个正确的方向,那太棒了。谢谢
package com.elliott.lyric.io;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import static org.apache.http.protocol.HTTP.USER_AGENT;
/**
* Created by elliott on 05/05/2017.
*/
public class SpotifyLoader {
String nowPlayingURL = "https://api.spotify.com/v1/me/player/currently-playing";
String authURL = "https://accounts.spotify.com/api/token?grant_type=client_credentials";
String clientID = "";
String secretID = "";
String authScope = "user-read-currently-playing user-read-playback-state";
public SpotifyLoader() {
authorize();
//getRawPlaying();
}
void authorize() {
try {
HttpClient client = HttpClientBuilder.create().build();
System.out.println(authURL);
HttpPost post = new HttpPost(authURL);
// add header
post.setHeader("User-Agent", USER_AGENT);
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
List<NameValuePair> urlParameters = new ArrayList<>();
String idSecret = clientID + ":" + secretID;
String idSecretEncoded = new String(Base64.encodeBase64(idSecret.getBytes()));
urlParameters.add(new BasicNameValuePair("Authorization", "Basic " + idSecretEncoded));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
System.out.println("Response Code : "
+ response.getStatusLine().getStatusCode());
BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
}
}
void getRawPlaying() {
}
}
尝试以下更改的请求
>
在标题中发送授权。我刚刚修改了authorize(),如下所示。
void authorize() {
try {
authURL = "https://accounts.spotify.com/api/token";
String idSecret = clientID + ":" + secretID;
String idSecretEncoded = new String(Base64.encodeBase64(idSecret.getBytes()));
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(authURL);
post.setHeader("User-Agent", USER_AGENT);
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
post.setHeader("Authorization", "Basic " + idSecretEncoded);
List<NameValuePair> urlParameters = new ArrayList<>();
urlParameters.add(new BasicNameValuePair("grant_type", "client_credentials"));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
System.out.println("Response Code : " + response.getStatusLine().getStatusCode());
BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
在此处为客户端凭据流使用Spotify文档: 我能够在谷歌应用程序脚本(Javascript)中创建API请求。 我对两件事感到困惑,请能够回答这两件事。 1). Spotify文档声明在授权标头中的客户端凭据之前输入“Basic”。 然而,当我运行这段代码时,我得到了这个错误 如果我在使用客户端凭据流,为什么它认为我在使用承载令牌?(同样,如果我将身份验证更改为Bearer,我会收到401错误“
直截了当的问题,希望有一个直截了当的答案。我试图使用request通过Node.js实现客户端凭证流。这是我的代码 无论我做什么,响应体总是 我尝试过使用 curl 提出请求,结果相同。 这意味着这是凭据的问题。我肯定为我的应用程序使用了正确的客户端ID和客户端秘密,这让我相信是编码导致了问题。 我的编码正确吗?如果是这样,还有什么原因呢?
我已经考虑这个问题好几天了,从经验中我知道我通常会解决这些问题,但这次我遇到了砖墙。 我有一个在Azure DevOps YAML管道中实例化的python应用程序。该应用程序调用Azure DevOps REST API来创建存储库 该应用程序使用PAT(个人访问令牌)进行身份验证 我在Azure DevOps中创建了一个应用程序: 我的计划是让这一切都在Postman中工作,然后将我的发现移植
如果可能的话请告诉我。另外,我想传达的是Keycloak和openid-connect协议是全新的。
我已经读了很多关于CORS,角,节点等的东西。老实说,我很困惑这些我应该使用哪一个,我不知道如何使用。有人能帮我简化一下吗?
问题内容: 我正在尝试了解和实现新的REST服务器与现有的客户端应用程序之间的客户端凭证流。我已经像这样设置了spring-security OAuth2 。从到目前为止的理解来看,我的服务器现在应该支持以下请求: 但我明白了 由引起的是这里(弹簧安全码): 看来,我需要首先 针对服务器 进行 身份验证 。但这 不是我想做的 。我希望我的两个服务器使用共享密钥相互通信。OAuth提供者服务器应应请