2014-09-04 87 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; 
}