有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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


共 (1) 个答案

  1. # 1 楼答案

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

    然而,如果你想签署请求,那么有很多开源库可以做到这一点。我正在使用泽西岛的“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;
    }