使用用户名和密码生成访问令牌

时间:2019-08-20 15:02:12

标签: java post https access-token encoder

我正在尝试使用客户端用户名和密码进行呼叫后生成访问令牌。我想知道如何通过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中传递。您能告诉我如何使用此用户名和密码生成访问令牌。

1 个答案:

答案 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标头中。