如何使用signpost,scribe type library加密我对salesforce的oauth post请求

时间:2015-05-22 13:28:56

标签: oauth oauth-2.0 salesforce authorization google-oauth

我想要用于加密我的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);
        } 

    }

1 个答案:

答案 0 :(得分:0)

我认为你正在混淆协议。 OAuth 2不使用签名。 (OAuth1确实如此)。

授权请求通常需要response_typeclient_idredirect_uristate。 (还有其他参数类似scope,但并非总是如此。

使用response_type=code时,您会从授权服务器获得code(例如,Salesforce,Google)。然后使用/token端点来交换令牌的代码。该端点使用client_secret

(此处描述了协议概述:https://auth0.com/docs/protocols#1