我正在尝试使用客户端用户名和密码进行调用后生成访问 token 。我想知道我们如何通过Java代码实现这一点。
基本上,我有用户名和密码。我需要获取访问 token 才能传入下面的授权 header
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);
基本上,我有一个用户名和密码。我需要获取访问 token 才能在下面的authorizationHeader 中传递。您能否告诉我如何使用此用户名和密码生成访问 token 。
最佳答案
通过提供用户名和密码来获取访问 token 的标准方法称为“资源所有者密码凭据”流程(RFC 6749,4.3)。如果服务器的 token 端点支持该流程,则您应该发出如下请求。
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
请求参数。如果客户端类型是 secret ,则需要客户端身份验证的请求参数。关于客户端身份验证,请参阅“OAuth 2.0 Client Authentication”。
最后,请注意,(a)用户的凭据和 (b)客户端的凭据是不同的东西。在 OAuth 2.0 的上下文中,没有规范要求将用户的凭据嵌入到 Authorization
header 中。另一方面,client_secret_basic
(客户端身份验证方法之一)要求将客户端的凭据嵌入到 Authorization
header 中。
关于java - 使用用户名和密码生成访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576507/