2014-09-04 57 views
1

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

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

回答

3

这个问题在某些方面不正确,因为“授权标题”里面会有签名。如果您想验证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; 
}