【问题标题】:Java Method to receive the request and generate Oauth Signature接收请求并生成 Oauth 签名的 Java 方法
【发布时间】:2019-11-14 18:42:00
【问题描述】:

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

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

【问题讨论】:

    标签: java oauth


    【解决方案1】:

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

    但是,如果您想签署请求,那么有很多开源库可以做到这一点。我正在使用 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;
    }
    

    【讨论】:

    • OAuthSecrets 未定义,我可以从哪里得到这个?
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 2017-03-17
    • 2020-01-17
    • 1970-01-01
    • 2019-04-26
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多