由於我已經看到關於如何在LinkedIn/Twitter上使用OAuth 1 3腿或2腿授權的問題,我想我會發佈一個我如何實現的示例以JOAuth授權給Twitter。使用JOAuth進行OAuth 1授權,需要示例
回答
這是如何檢索來自Twitter的訪問令牌net.oauth.token.v1.AccessToken
。
首先,你需要從Twitter,你需要你的應用程序註冊到Twitter,並得到一個應用兩兩件事:
- API密鑰(OAuth的呼籲消費者鍵)
- API揭祕( OAuth稱其爲消費者機密)。
現在,這裏是我們將如何認證到Twitter:
首先,讓我們有我們的2種方法包含我們的API密鑰&祕密:
private static final String API_KEY = "TWITTER_API_KEY_HERE";
private static final String API_SECRET = "TWITTER_API_SECRET_HERE";
哦,是的,我們需要一個callback_url
:
private static final String CALLBACK_URL = "oob";
稍後我將解釋oob
(出帶外)。
然後,我們需要創建一個消費者,將做OAuth授權給我們:
private OAuth1Consumer consumer = new OAuth1Consumer(API_KEY, API_SECRET, new OAuth1ServiceProvider("https://api.twitter.com/oauth/request_token", "https://api.twitter.com/oauth/authorize", "https://api.twitter.com/oauth/access_token"));
的參數如下:API密鑰,其次是API祕密,OAuth的服務提供商(包括請求令牌URL,授權令牌URL,訪問令牌URL)。
現在,讓我們的樂趣開始:
申請一個(非授權)請求令牌:
爲了獲得一個請求令牌,我們需要從OAuth1Consumer
類調用requestUnauthorizedToken
:
RequestToken requestToken = consumer.requestUnauthorizedToken(null, CALLBACK_URL, null, new OAuthHmacSha1Signature());
第一個參數是realm
,它是空的(因爲Twitter沒有真正使用它),然後是callback_url
和簽名方法。
有3個有效的OAuth簽名方法:
- PLAINTEXT(發送原樣,在明文),
OAuthPlainTextSignature
類。 - HMAC-SHA1,類
OAuthHmacSha1Signature
。 - RSA-SHA1,類
OAuthRsaSha1Signature
。
Twitter使用HMAC-SHA1,請在向其他提供商做OAuth時參考文檔。
現在我們有一個未經授權的請求令牌,讓我們對它進行授權。
一個授權(授權)請求令牌:
授權需要用戶去服務提供商網址和登錄,因此我們需要,我們可以在我們的瀏覽器重定向到URL。
String url = consumer.createOAuthUserAuthorizationUrl(requestToken, null);
(第2個參數是null
因爲我們沒有額外的HTTP參數發送通過,但如果這樣做,創建一個Map<String, String>
屬性,填補他們和大塊它在方法調用:))
現在我們有URL,查網址到瀏覽器,授權的應用程序,這裏就是callback_url
進來:
外的帶外(OOB)授權
OOB授權用於不能執行HTTP重定向但仍希望請求訪問令牌的應用程序。 Twitter表示使用PIN代替HTTP重定向。該密碼(授權Twitter應用程序後顯示)由Twitter作爲瀏覽器上的圖像顯示。有關更多信息,請參閱Twitter OAuth API Documentation。
在基於OOB電話,一旦你授權的應用程序,微博向您發送PIN:一旦你看到的針,以獲得訪問令牌,請執行以下操作:
String twitterPin = ""; //Whatever Twitter displayed
AccessToken accessToken = example.requestAccessToken(new AuthorizedToken(requestToken.getToken(), twitterPin), requestToken);
在這裏,我們走了。
一旦你調用了你的訪問令牌,真正的訪問令牌值就是AccessToken.getToken()
方法。
回調重定向(非OOB)
如果你沒有設置你的callback_url
爲oob
,Twitter將返回到您的應用程序與授權令牌授權申請後重定向。我已經創建了一個處理這個過程,所以我們需要我們的OAuthServlet
爲我們做這個。
首先,我們需要建立在我們項目的WEB-INF
項目oauth-config.xml
,像這樣:
<?xml version="1.0" encoding="UTF-8"?>
<oauth-config>
<!-- Twitter OAuth Config -->
<oauth name="twitter" version="1">
<consumer key="TWITTER_KEY" secret="TWITTER_SECRET" />
<provider requestTokenUrl="https://api.twitter.com/oauth/request_token" authorizationUrl="https://api.twitter.com/oauth/authorize" accessTokenUrl="https://api.twitter.com/oauth/access_token" />
</oauth>
<service path="/request_token_ready" class="com.neurologic.example.TwitterOAuthService" oauth="twitter">
<success path="/start.htm" />
</service>
</oauth-config>
然後,我們將需要配置我們web.xml
包括OAuthServlet
。
<servlet>
<description>An OAuth Servlet Controller</description>
<display-name>OAuthServlet</display-name>
<servlet-name>OAuthServlet</servlet-name>
<servlet-class>com.neurologic.oauth.servlet.OAuthServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/oauth-config.xml</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>OAuthServlet</servlet-name>
<url-pattern>/oauth/*</url-pattern>
</servlet-mapping>
現在定義一個Service。該服務將要求我們提供RequestToken
和realm
(如果您願意的話)。我的完整源代碼如下。在調用服務之前,我在會話中保存了上面檢索到的請求令牌。
/**
*
*/
package com.neurologic.example;
import javax.servlet.http.HttpServletRequest;
import net.oauth.signature.OAuthSignature;
import net.oauth.signature.impl.OAuthHmacSha1Signature;
import net.oauth.token.v1.AccessToken;
import net.oauth.token.v1.RequestToken;
import com.neurologic.oauth.service.impl.OAuth1Service;
/**
* @author Buhake Sindi
* @since 31 May 2011
*
*/
public class TwitterOAuthService extends OAuth1Service {
public static final String TWITTER_REQUEST_TOKEN_SESSION = "TWITTER_REQUEST_TOKEN_SESSION";
public static final String TWITTER_ACCESS_TOKEN_SESSION = "TWITTER_ACCESS_TOKEN_SESSION";
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth1Service#getOAuthSignature()
*/
@Override
protected OAuthSignature getOAuthSignature() {
// TODO Auto-generated method stub
return new OAuthHmacSha1Signature();
}
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth1Service#getRealm()
*/
@Override
protected String getRealm() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth1Service#getRequestToken(javax.servlet.http.HttpServletRequest)
*/
@Override
protected RequestToken getRequestToken(HttpServletRequest request) {
// TODO Auto-generated method stub
return (RequestToken) request.getSession().getAttribute(TWITTER_REQUEST_TOKEN_SESSION);
}
/* (non-Javadoc)
* @see com.neurologic.oauth.service.OAuthService#saveAccessToken(javax.servlet.http.HttpServletRequest, java.lang.Object)
*/
@Override
public void saveAccessToken(HttpServletRequest request, AccessToken accessToken) {
// TODO Auto-generated method stub
request.getSession().setAttribute(TWITTER_ACCESS_TOKEN_SESSION, accessToken);
}
}
從服務的saveAccessToken()
方法是當由Twitter獲得訪問令牌由服務調用的方法(我使用Twitter作爲一個例子,但隨意使用任何服務提供商)。
Servlet通過授權我的請求令牌和檢索訪問令牌來處理握手,而無需編寫額外的流程代碼。
我希望這可以幫助大家!
- 1. 需要使用django-tastypie進行授權的示例
- 2. 需要授權標題Fitbit Swift oauth
- 3. gsutil OAuth2授權(需要.boto文件的示例)
- 4. 使用OAuth進行API授權,使用PHP
- 5. 使用__getattr__進行授權
- 6. 使用MvvmCross進行授權?
- 7. 使用OAuth進行服務器端授權
- 8. 使用我自己的密碼進行OAuth 2.0授權
- 9. 使用WePay.com進行身份驗證和授權OAuth 2.0
- 10. 環回ACL「需要授權」
- 11. RewriteRule使OAuth授權失敗
- 12. Youtube Api - 「需要授權您需要在繼續之前授權訪問」錯誤
- 13. com.twitter.sdk.android.core.TwitterApiException:401需要授權
- 14. 我需要簡單的python oAuth示例
- 15. SVN 401需要授權
- 16. 權限需要授予執行
- 17. Box Oauth Powershell授權
- 18. Twitter的OAuth授權
- 19. OAuth lib不授權?
- 20. Slack Oauth /授權API調用
- 21. Ominauth-的Evernote,的OAuth ::使用了未經授權401未授權
- 22. Pinterest需要在OAuth工作之前授權App ID嗎?
- 23. Spring OAuth授權服務器需要範圍
- 24. Nativescript - 訪問需要授權的img src
- 25. Google API訪問授權 - 需要指導
- 26. 401未授權使用雅虎的OAuth
- 27. 401未經授權使用oauth-python-twitter
- 28. 使用JWT的Oauth 2.0授權
- 29. 使用cookie存儲oauth授權令牌
- 30. 使用3比例與共享OAuth授權服務器