Java方法接收请求并生成Oauth签名

时间:2014-09-04 09:39:00

标签: java oauth

我想编写一个java方法,它将接收包含Authorization标头的请求,并使用HMAC-SHA1生成Oauth签名并将其作为响应发送。我想知道如何实现这个目标?

我希望该方法应该从请求中获取签名基本字符串并使用算法生成签名。如果我错了,或者有任何其他方法可以获得类似的输出,请纠正我。

1 个答案:

答案 0 :(得分:3)

这个问题在某些方面不正确,因为"授权标题"里面会有签名。如果您要验证oauth请求,那么您将首先验证使用者密钥,然后使用所有其他字段生成签名,并将秘密存储在您的最后,并根据" Authorization标头中的签名对其进行验证。 #34;

但是,如果要签署请求,那么有许多开源库可以做到这一点。我正在使用Jersey" oauth签名"图书馆签署请求。

public static String getOAuthHeader(final String url, final String method,
        final String realm, final String consumerSecret,
        final String consumerKey, final String callback,
        final String verifier, final String token,
        final String tokenSecret, final String host) {

    String oauthHeader = null;
    OAuthSecrets secrets = new OAuthSecrets()
            .consumerSecret(consumerSecret);
    OAuthParameters authParams = new OAuthParameters()
            .consumerKey(consumerKey).signatureMethod(HMAC_SHA1.NAME)
            .version(AuthenticationConstants.OAUTH_VERSION_10A)
            .realm(realm).nonce().timestamp();

    if (callback != null) {
        authParams = authParams.callback(callback);
    }

    if (verifier != null) {
        authParams = authParams.verifier(verifier);
    }

    if (token != null) {
        authParams = authParams.token(token);
    }

    if (tokenSecret != null) {
        secrets = secrets.tokenSecret(tokenSecret);
    }

    final OAuthRequestData request = new OAuthRequestData();
    request.setRequestMethod(method);
    request.setRequestURL(url);
    request.addHeaderValue(AuthenticationConstants.HOST_HEADER, host);

    try {

        OAuthSignature.sign(request, authParams, secrets);

        final List<String> header = request
                .getHeaderValues(OAuthParameters.AUTHORIZATION_HEADER);
        oauthHeader = header.get(0);
    } catch (final OAuthSignatureException oae) {
        //handle this exception
    }

    return oauthHeader;
}