我正在尝试使用客户端用户名和密码进行呼叫后生成访问令牌。我想知道如何通过Java代码实现这一目标。
基本上,我有用户名和密码。我需要获取访问令牌才能在授权标头下方传递
byte[] encryptedAccessToken = null;
String username = "someUser";
String pass = "somePassword";
String auth = username + ":" + pass;
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.ISO_8859_1));
URL obj = new URL("https://api.salesforce.com/v2/oauth/token?grant_type=openapi_2lo");
HttpURLConnection postConnection = (HttpURLConnection) obj.openConnection();
postConnection.setRequestMethod("POST");
String authorizationHeader = "Bearer " + "encodedAuth";
postConnection.setRequestProperty("Content-Type", "application/json");
postConnection.setRequestProperty("Authorization", authorizationHeader);
postConnection.setDoOutput(true);
基本上,我有一个用户名和密码。我将需要获取访问令牌以在下方的AuthorizationHeader中传递。您能告诉我如何使用此用户名和密码生成访问令牌。
答案 0 :(得分:0)
通过显示用户名和密码来获取访问令牌的标准方法称为“资源所有者密码凭据”流程(RFC 6749,4.3)。如果服务器的令牌端点支持该流,则您应该发出如下请求。
POST {Token Endpoint} HTTP/1.1
Host: {Authorization Server}
Content-Type: application/x-www-form-urlecoded
grant_type=password // - Required
&username={User ID} // - Required
&password={Password} // - Required
&scope={Scopes} // - Optional
如果客户端应用程序的客户端类型(RFC 6749,2.1)为 public ,则也需要一个client_id
请求参数。如果客户端类型为机密,则需要用于客户端身份验证的请求参数。关于客户端身份验证,请参见“ OAuth 2.0 Client Authentication” 。
最后,请注意,(a)用户的凭据和(b)客户端的凭据是不同的。在OAuth 2.0的上下文中,没有规范要求在Authorization
标头中嵌入用户的凭证。另一方面,client_secret_basic
(一种客户端身份验证方法)要求将客户端的凭据嵌入到Authorization
标头中。