我想要用于加密我的oauth 2.0帖子请求的示例基本代码,这些代码可以与google,salesforce等多个应用程序一起使用。
我已经尝试过这个代码用于salesforce授权,但它给了我错误的请求错误。我试图签署oauth post请求,但在oauth 1.0和2.0中感到困惑 -
public String getAuthorizationUrl() {
LOGGER.debug("SalesforceUtility - getAuthorizationUrl");
try {
String baseUrl = "?response_type=code" + "&client_id="
+ this.clientSecrets.get("client_id") + "&redirect_uri="+ URLEncoder.encode(this.clientSecrets.getString("redirect_uri"), "UTF-8");
String authorize_url = this.clientSecrets.get("auth_uri")
+ baseUrl ;
computeSignature(baseUrl,client_secret);
LOGGER.debug("SalesforceUtility - AuthorizationUrl" + authorize_url);
return authorize_url;
} catch (Exception e) {
LOGGER.error("Exception getAuthorizationUrl", e);
throw new BusinessException(e,
BusinessErrorCode.SALESFORCE_AUTH_URL);
}
}
private static String computeSignature(String baseString, String keyString) {
SecretKey secretKey = null;
byte[] keyBytes = keyString.getBytes();
secretKey = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac;
try {
mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
byte[] text = baseString.getBytes();
return new String(Base64.encodeBase64(mac.doFinal(text))).trim();
} catch (Throwable t) {
throw new SystemException(SystemErrorCode.SALESFORCE_UNSUPPORTED_ENCODING_EXCEPTION);
}
}
答案 0 :(得分:0)
我认为你正在混淆协议。 OAuth 2不使用签名。 (OAuth1确实如此)。
授权请求通常需要response_type
,client_id
,redirect_uri
和state
。 (还有其他参数类似scope
,但并非总是如此。
使用response_type=code
时,您会从授权服务器获得code
(例如,Salesforce,Google)。然后使用/token
端点来交换令牌的代码。该端点使用client_secret
。
(此处描述了协议概述:https://auth0.com/docs/protocols#1)