日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java oauth2.0_教程:如何实现Java OAuth 2.0以使用GitHub和Google登录

發(fā)布時(shí)間:2023/12/3 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java oauth2.0_教程:如何实现Java OAuth 2.0以使用GitHub和Google登录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java oauth2.0

將Google和GitHub OAuth登錄添加到Java應(yīng)用程序的指南

我們添加到Takipi的最新功能之一是3rd party登錄。 如果您像我一樣懶惰,那么我想您也希望跳過填寫表單和輸入新密碼的操作 。 只要有權(quán)限,許多人都希望使用第三方登錄,只要他們要求的權(quán)限是非侵入性的-沒有人真正希望在Facebook墻上顯示隨機(jī)帖子,因此這種訪問方式僅包括用戶的基本信息,例如姓名和電子郵件地址。 在本文中,您將初步了解我們?nèi)绾卧赥akipi中實(shí)現(xiàn)此功能,如何在應(yīng)用程序中使用3rd party登錄,以及我們獲得的一些見解,如果您決定集成,則可以節(jié)省一些寶貴的時(shí)間使用您自己的應(yīng)用程序。

新帖:如何實(shí)現(xiàn)Java OAuth 2.0以使用GitHub和Google登錄http://t.co/20Hn59dCtf pic.twitter.com/3tNNwPKjET

— Takipi(@takipid) 2015年5月14日

在我們自己的小宇宙中,事實(shí)證明,我并不孤單,許多用戶也有同樣的感覺。 由于我們是一家開發(fā)人員工具初創(chuàng)公司,因此使用GitHub和Google的第三方登錄非常合理。 除了為用戶提供便利之外,使用第三方服務(wù)還可以增強(qiáng)其安全性。 由于Google和GitHub使用雙重身份驗(yàn)證(2FA),您的應(yīng)用程序可以“免費(fèi)”享受這種安全級(jí)別。 在我們的案例中,我們已經(jīng)啟用了2FA,所以我想這使我們……3FA��

帶有第3個(gè)聚會(huì)登錄按鈕的新主頁(yè)的樣機(jī)預(yù)覽

要查看其在實(shí)際中的工作方式,您可以查看我們內(nèi)部用于測(cè)試的頁(yè)面 。 完全可以使用,但是更新尚未在該站點(diǎn)上發(fā)布。 您在這里有一個(gè)難得的機(jī)會(huì)成為第一個(gè)使用它的人:)

因此,提醒我OAuth 2.0又如何發(fā)展?

OAuth登錄流程如下:用戶訪問您的站點(diǎn),單擊“使用任何方式登錄”按鈕,然后重定向到權(quán)限頁(yè)面。 權(quán)限頁(yè)面來自Whatever?,當(dāng)他們批準(zhǔn)您要求的權(quán)限時(shí),Whatever?向他們發(fā)送一個(gè)令牌,令牌將由他的瀏覽器發(fā)送到您的應(yīng)用程序的后端。 擁有令牌后,將其發(fā)送回Whatever?進(jìn)行驗(yàn)證并假設(shè)它已通過驗(yàn)證–您可以訪問被授予權(quán)限的數(shù)據(jù)。

Google OAuth2.0庫(kù)

為了在我們的網(wǎng)站上實(shí)現(xiàn)第三方登錄,我們使用了Google APIs Java 客戶端庫(kù) 。 在GitHub頂級(jí)Java項(xiàng)目使用的前100個(gè)庫(kù)中 ,還包含Jackson2,ProtoBuf和所有其他方便的實(shí)用程序。 對(duì)于我們來說,這是一個(gè)非常簡(jiǎn)單的選擇,因?yàn)槲覀円呀?jīng)將該庫(kù)用于其他目的,而且,老實(shí)說,谷歌庫(kù)只是出現(xiàn)在……谷歌上的第一個(gè)結(jié)果。 準(zhǔn)備好您的錫箔帽子 。

使用Google實(shí)施登錄

這是旅途中的輕松部分; Google的說明文件很明確而且很明確。 由于它是他們自己的庫(kù),因此他們還抽象了過程的一部分并在后臺(tái)對(duì)其進(jìn)行處理,從而使其更易于實(shí)現(xiàn)。 第一步是在Google開發(fā)人員控制臺(tái)上創(chuàng)建一個(gè)項(xiàng)目,您可以在其中注冊(cè)應(yīng)用程序并自定義權(quán)限頁(yè)面。

Google的權(quán)限頁(yè)面–為Takipi定制

現(xiàn)在回到Java。 從本質(zhì)上講,該過程可以簡(jiǎn)化為幾個(gè)簡(jiǎn)單的步驟,不會(huì)讓人感到意外。 首先,我們構(gòu)建并執(zhí)行一個(gè)獲取GoogleTokenResponse的請(qǐng)求,以便我們可以驗(yàn)證從用戶那里獲得的令牌。 然后,我們使用此響應(yīng)來創(chuàng)建一個(gè)GoogleCredential ,讓我們對(duì)其調(diào)用getAccessToken()并以JSON格式返回用戶的信息:

JsonFactory jsonFactory = new JacksonFactory(); HttpTransport httpTransport = new NetHttpTransport();GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(httpTransport, jsonFactory,/* Client ID and Secret */,code, "postmessage").execute();GoogleCredential credential = new GoogleCredential.Builder().setJsonFactory(jsonFactory).setTransport(httpTransport).setClientSecrets(/* Client ID and Secret */).build().setFromTokenResponse(tokenResponse);Oauth2 oauth2 = new Oauth2.Builder(httpTransport, jsonFactory, credential).setApplicationName("YourAppName").build(); Tokeninfo tokenInfo = oauth2.tokeninfo().setAccessToken(credential.getAccessToken()).execute();return oauth2.userinfo().get().execute();

繁榮。 而已。 最好的建議是僅遵循官方文檔。 在GitHub的一端,實(shí)現(xiàn)有些棘手。

使用GitHub實(shí)施登錄

現(xiàn)在,我們意識(shí)到Google幫助我們?cè)贠Auth方面走了一些彎路,并在GoogleTokenResponse和GoogleCredential中使用了抽象。 使用GitHub,我們必須更接近原始協(xié)議。 與Google類似,在GitHub的開發(fā)人員應(yīng)用程序屏幕上注冊(cè)我們的應(yīng)用程序時(shí),我們可以自定義權(quán)限屏幕 。

GitHub的權(quán)限頁(yè)面–為Takipi定制

當(dāng)我們到達(dá)實(shí)際的代碼時(shí),有3個(gè)主要問題使我們放慢了速度,而在文檔中找不到。 解決方法如下:

1.建立自己的請(qǐng)求流程

在Google的情況下,只有5行代碼,變成了19行,因此我們可以生成GitHub tokenResponse。 以下是您自己建立請(qǐng)求的方法:

JsonFactory jsonFactory = new JacksonFactory(); HttpTransport httpTransport = new NetHttpTransport();AuthorizationCodeFlow flow = new AuthorizationCodeFlow.Builder(BearerToken.authorizationHeaderAccessMethod(),httpTransport, jsonFactory,new GenericUrl("https://github.com/login/oauth/access_token"),new ClientParametersAuthentication(/* Client ID and Secret */),/* Client ID */"https://github.com/login/oauth/authorize").build();TokenResponse tokenResponse = flow.newTokenRequest(code).setScopes(Collections.singletonList("user:email")).setRequestInitializer(new HttpRequestInitializer() {@Overridepublic void initialize(HttpRequest request) throws IOException {request.getHeaders().setAccept("application/json");}}).execute();

由于某種原因,字符串是默認(rèn)值

注意到setAccept的更早的初始化方法嗎? 這有點(diǎn)令人驚訝。 事實(shí)證明,您需要明確要求GitHub以JSON格式返回響應(yīng),否則您將以字符串格式獲取響應(yīng)。 如果我們事先知道的話,它可以為我們節(jié)省一些時(shí)間,例如:

但值得慶幸的是,我們找到了一些膠帶和回形針來處理事情

3.處理用于GitHub登錄的用戶電子郵件

現(xiàn)在,一個(gè)GitHub用戶可能有多個(gè)電子郵件地址,然后您必須選擇用于自己目的的電子郵件地址。 因此,我們創(chuàng)建了一個(gè)getBestEmail方法,該方法可以對(duì)電子郵件數(shù)組進(jìn)行排序(注意,它應(yīng)該擴(kuò)展ArrayList才能起作用)。 在對(duì)電子郵件數(shù)組進(jìn)行排序之后,我們選擇了可以找到的最佳選項(xiàng):

public class GithubEmails extends ArrayList<GithubEmail> {public GithubEmail getBestEmail() {if (isEmpty()) {return null;}Collections.sort(this, GithubEmail.bestEmailComparator);return get(0);} }

那么最好的選擇是什么? 我們從GitHub的響應(yīng)中獲得的此電子郵件數(shù)組中的每個(gè)字段都有一封電子郵件,一個(gè)經(jīng)過驗(yàn)證的字段和一個(gè)主字段。 這是我們實(shí)現(xiàn)的排序比較器:

public static final Comparator<? super GithubEmail> bestEmailComparator =new Comparator<GithubEmail>() {@Overridepublic int compare(GithubEmail o1, GithubEmail o2) {if (o1.verified != o2.verified) {return (o1.verified ? -1 : 1);}if (o1.primary != o2.primary) {return (o1.primary ? -1 : 1);}return o1.email.compareTo(o2.email);} };

因此,基本上您可以看到我們更喜歡經(jīng)過驗(yàn)證的電子郵件和主要電子郵件。

結(jié)論

我們希望這篇文章可以幫助您將注意力集中在如何通過Google和GitHub的登錄方法來訪問OAuth和Java上。 雖然這是我們決定實(shí)現(xiàn)的方式,但是您可以使用其他方式和庫(kù)來獲得類似的結(jié)果。 我們很高興聽到您采用哪種方法,更喜歡哪種庫(kù)并回答有關(guān)此實(shí)現(xiàn)的任何問題。 如果您對(duì)我們的決定方式有任何意見或建議,請(qǐng)?jiān)谙旅娴脑u(píng)論部分中告知我。 而且,如果您遇到麻煩,請(qǐng)分享您遇到的困難,我們將很樂于幫助和分享更多代碼。

翻譯自: https://www.javacodegeeks.com/2015/05/tutorial-how-to-implement-java-oauth-2-0-to-sign-in-with-github-and-google.html

java oauth2.0

總結(jié)

以上是生活随笔為你收集整理的java oauth2.0_教程:如何实现Java OAuth 2.0以使用GitHub和Google登录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。