国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Android開發:OAuth2服務認證

移動開發 Android
OAuth2協議是一種向第三方服務進行身份驗證的工業標準方法.OAuth2提供一個單值,叫做** 認證令牌(auth token)** ,代表用戶身份和程序身份驗證授權。這節課將要演示連接到一個支持OAuth2的Google服務器上。盡管Google服務只是用作示例,但是演示的這 項技術將會在任何正確支持OAuth2協議的服務上工作。

為了安全地訪問在線服務,用戶需要在服務上進行身份驗證,即要提供他們的身份的證明。對于一個要訪問第三方服務的程序來說,安全問題甚至更復雜。不僅僅是用戶需要在訪問服務前要進行身份驗證,而且程序也要進行身份驗證來授權用戶。

OAuth2協議是一種向第三方服務進行身份驗證的工業標準方法.OAuth2提供一個單值,叫做** 認證令牌(auth token)** ,代表用戶身份和程序身份驗證授權。這節課將要演示連接到一個支持OAuth2的Google服務器上。盡管Google服務只是用作示例,但是演示的這 項技術將會在任何正確支持OAuth2協議的服務上工作。

使用OAuth2有利于:

  • 從用戶手中得到授權訪問那些需要他/她的賬戶的在線服務。
  • 代替用戶在一個在線服務上驗證身份。
  • 處理驗證錯誤

收集信息

要開始使用Oauth2,你需要知道一些關于你要訪問的API的信息:

  • 你要訪問的服務的地址。
  • 認證范圍(auth scope)。它是一個定義了你的應用需要的特定訪問類型的字符串。例如,Google Tasks的只讀訪問認證范圍范圍是'''查看你的任務(View your tasks)''',而可讀寫訪問的認證范圍是'_管理你的任務(Manage Your Tasks)* 。
  • 一個**客戶端ID(client id)和客戶端密鑰(client secret)** 。他們是在服務中為了識別你的應用的字符串。你需要從服務提供者手中獲取這些字符串。Google 有一個自服務系統用來獲取客戶端ID和密鑰。Getting Started with the Tasks API and OAuth 2.0 on Android 這篇文章解釋了如何使用這套系統來獲取這些用于Google Tasks API的值對。

請求一個驗證令牌

現在你已經準備好獲取一個身份驗證令牌了。獲取步驟如下圖所示。

為了得到一個驗證令牌,首先需要在你的manifest文件中請求* INTERNET* 權限。

  1. <manifest ... > 
  2.     <uses-permission android:name="android.permission.ACCOUNT_MANAGER" /> 
  3.     <uses-permission android:name="android.permission.INTERNET" /> 
  4.     ... 
  5. </manifest> 

一旦你的應用有了這些權限,你就可以調用AccountManager.getAuthToken() 方法來獲取令牌。

注意了!在AccountManager 的方法是異步的。這意味著相對于在一個方法中獲取所有的令牌的工作,你需要把他們分散到一系列的回調函數中實現。例如:

  1. AccountManager am new Bundle(); 
  2. am.getAuthToken( 
  3.     myAccount_,                     // 用getAccountsByType()來檢索的賬戶 
  4.     "Manage your tasks",            // 令牌范圍 
  5.     options,                        // 特殊驗證選項 
  6.     this,                           // 你的activity 
  7.     new OnTokenAcquired(),          // 成功獲取令牌后調用的回調函數 
  8.     new Handler(new OnError()));    // 錯誤發生時調用的回調函數 

在這個例子中,OnTokenAcquired是一個繼承了**AccountManagerCallback**的類。**AccountManager**在**OnTokenAcquired**中調用**run()**方法,該方法需要傳遞一個含有一個**Bundle**的**AccountManagerFuture**的實例。如果調用成功,那么這個令牌中就包含了這個Bundle

這里展現如何從** Bundle** 中獲取令牌的方法:

  1. private class OnTokenAcquired implements AccountManagerCallback<Bundle> { 
  2.     @Override 
  3.     public void run(AccountManagerFuture<Bundle> result) { 
  4.         // Get the result of the operation from the AccountManagerFuture. 
  5.         Bundle bundle = result.getResult(); 
  6.  
  7.         // The token is a named value in the bundle. The name of the value 
  8.         // is stored in the constant AccountManager.KEY_AUTHTOKEN. 
  9.         token = bundle.getString(AccountManager.KEY_AUTHTOKEN); 
  10.         ... 
  11.     } 

如果這一切都運行順利,那么這個** KEY_AUTHTOKEN** 中會包含一個有小額令牌,并且你就開始“啟程遠洋”了。盡管事情不會總是那么順利……

請求一個驗證令牌……再來一次

首先,你的一個驗證令牌請求可能會因為一些原因而失敗:

  • 設備或網絡錯誤導致
  • 用戶決定不想讓你的應用訪問他的賬戶。
  • 保存的賬戶憑據不足以能夠得到訪問該賬戶的權限。
  • 緩存的賬戶令牌已經過期。

應用程序可以用平常方式夠處理前兩種問題,通常做法是簡單地把錯誤信息顯示給用戶。如果網絡斷開或者用戶決定不同意訪問,那么你的程序就沒有太多可以做的事。最后兩個問題有點復雜,因為運行正常的應用能夠自行處理這些失敗情形。

對于第三種失敗情形,即沒有充分的憑據,會通過你在* Intent* ,那么這個驗證程序就會告訴你,在它可以給你一個可用的令牌之前,它需要和用戶直接進行交互。

有很多原因可導致驗證程序返回一個* Intent*。它可能是用戶第一次登錄賬戶的時候。或許該用戶的賬戶已經過期卻還要登陸,又或許他們存儲的憑據本身就是錯的。可能該賬戶需要雙重認證或者它需要激活照相機來做虹膜掃描。具體什么原因并不重要,如果你想得到一個合法令牌,你就不得不一連串的詢問* Intent* 來獲得。

  1. private class OnTokenAcquired implements AccountManagerCallback<Bundle> { 
  2.     @Override 
  3.     public void run(AccountManagerFuture<Bundle> result) { 
  4.         ... 
  5.         Intent launch = (Intent) result.get(AccountManager.KEY_INTENT); 
  6.         if (launch != null) { 
  7.             startActivityForResult(launch, 0); 
  8.             return
  9.         } 
  10.     } 

要注意這個例子中用了* startActivityForResult()) * 方法,所以你可以通過實現*onActivityResult())* 方法來捕獲這個 * Intent* 的結果。這個非常重要!如果你不想從驗證程序反饋的* Intent* 中捕獲結果,那么你將不可能知道用戶到底有沒有成功驗證。如果結果是* RESULT_OK*,那么驗證程序已經更新并保存這些憑據,以便這些憑據足夠達到你所請求的訪問等級需求,然后你應該再次調用*AccountManager.getAuthToken()* 方法來請求新的認證令牌。

對于最后一個問題,即令牌已過期,這其實并不是一個* AccountManager* 不斷地去線上檢查所有令牌的狀態時非常浪費并且代價昂貴的。所以這個失敗只有當想你的一樣的程序常使用認證令牌來訪問線上服務時才能被檢測到。

連接在線服務

下面的例子展示如何連接到Google服務器。由于Google 使用了工業標準OAuth2協議來認證請求,我們之前在這里討論過的技術具有廣泛的適用性。但是,請記住每個服務器是不同的。你可能自己會發現根據具體情況,這些訪問賬戶的指令需要作出輕微的調整。

Google Api需要提供四個值以及與之對應的請求:API 鍵(key),客戶端ID,客戶端密鑰,以及認證鍵(the auth key)。前三個來自Google API Console網站。最后一個是你通過調用* AccountManager.getAuthToken()* 獲得的值。你把它們作為HTTP請求中的一部分傳遞到Google服務器。

  1. URL url " + your_api_key); 
  2. URLConnection conn = (HttpURLConnection) url.openConnection(); 
  3. conn.addRequestProperty("client_id", your client id); 
  4. conn.addRequestProperty("client_secret", your client secret); 
  5. conn.setRequestProperty("Authorization""OAuth " + token); 

如果請求返回一個HTTP錯誤號碼401,說明你的令牌被拒了。就像最后一部分提到的,這種情況最大的可能是令牌過期了。修復方法很簡單:調用* AccountManager.invalidateAuthToken())* 方法并且再次重復取令牌的過程。

由于令牌過期的情況太普遍,而且球服方法又如此簡單,許多程序會在請求令牌前都假定令牌已經過期。如果更新對于服務器成本很小,你應該更傾向于在第一次調用* AccountManager.getAuthToken()*之前就調用*AccountManager.invalidateAuthToken())* 方法,并且把你的一次認證令牌請求拆成兩次。

責任編輯:閆佳明 來源: eoe
相關推薦

2025-01-13 08:04:24

2025-04-29 09:07:21

2021-02-04 09:18:20

服務器認證自定義

2021-08-29 23:33:44

OAuth2服務器Keycloak

2021-11-15 13:58:00

服務器配置授權

2025-06-26 04:11:00

SpringSecurityOAuth2

2025-05-12 03:02:00

SpringOAuth2客戶端

2017-08-04 18:10:09

2023-08-31 08:34:07

Users對象序列化

2023-08-29 08:00:38

2022-04-11 07:34:46

OAuth2UAA節點

2021-08-02 12:50:45

sessiontokenJava

2014-04-21 14:56:45

NodeJSOAuth2服務器

2014-09-24 11:47:41

微信企業號開發

2025-04-16 08:00:00

FastAPIJWT用戶認證

2022-05-13 15:15:18

服務器OAuth2控制臺

2022-02-15 07:35:12

服務器KeycloakOAuth2

2022-05-12 07:37:51

單點登錄微服務開源

2020-11-12 09:55:02

OAuth2

2025-08-26 04:00:00

點贊
收藏

51CTO技術棧公眾號

国产亚洲亚洲国产一二区| 国产精品12p| 变态调教一区二区三区| 亚洲国产一区二区a毛片| 日本a级片在线观看| 亚洲伦理精品| 国产美女91呻吟求| 男女爱爱视频网站| 亚洲精品久久久| 午夜精品三级视频福利| 福利精品在线| 亚洲精品国精品久久99热| 137大胆人体在线观看| 欧美日韩在线第一页| 日日噜噜噜夜夜爽爽狠狠| 国产欧美日韩三区| 午夜dv内射一区二区| 国产一区二区h| 欧美一级专区免费大片| 男女免费网站| 久久久www成人免费毛片麻豆| 黄页网站大全在线观看| 大陆成人av片| 久久美女福利视频| 久久免费视频色| 成人av一级片| 久久精品夜夜夜夜久久| 免费激情视频在线观看| 日韩一级特黄| 亚洲视频日韩精品| 亚洲国产伊人| 久久久在线免费观看| 日本福利一区| 国产精品欧美日韩一区二区| 亚洲成人精品| 欧美性大战久久久久| 韩国v欧美v亚洲v日本v| av在线播放亚洲| 欧美国产欧美综合| 自由色视频.| 欧美日韩国产综合一区二区| 91九色国产在线播放| 最近更新的2019中文字幕| 亚洲男女网站| 国产精品久久久久av免费| 亚洲女同中文字幕| 日韩av一级大片| 国产成人一级电影| 成人蜜桃视频网站网址| 2020国产精品小视频| 欧美精品成人在线| 欧美日韩亚洲在线观看| 国产精品手机视频| 九九九久久久精品| 成人狠狠色综合| 欧美片在线播放| 涩涩涩久久久成人精品| 国产精品久久久精品| 亚洲欧美激情诱惑| 无码aⅴ精品一区二区三区浪潮 | 亚洲欧美另类动漫| 依依成人综合视频| 国产传媒在线播放| 久久的精品视频| 欧美疯狂party性派对| 亚洲一区在线视频| a毛片在线看免费观看| 免费不卡欧美自拍视频| 欧美国产免费| 亚洲av综合色区| 亚洲国产美女搞黄色| 阿v视频在线| 国产精品美女在线观看| 国模少妇一区二区三区| 日本午夜免费福利视频| 亚洲精品v欧美精品v日韩精品| 欧美国产不卡| 午夜欧美性电影| 天然素人一区二区视频| 国产精品普通话| 成人动漫精品一区二区| 新版中文字幕在线资源| 国产亚洲激情视频在线| 午夜电影亚洲| 亚欧在线免费观看| 日韩欧美一区二区视频| 精品国产乱码久久久| 日本人体一区二区| 欧美日韩一级二级| 97se亚洲| 亚洲成精国产精品女| 日韩精品卡一| 国产日韩在线精品av| 97精品久久久午夜一区二区三区| 男女av在线| 国产做受69高潮| 国产电影精品久久禁18| 91短视频版在线观看www免费| 国语自产精品视频在免费| 精品无码三级在线观看视频| jizz日韩| 91看片淫黄大片一级在线观看| 麻豆视频在线免费观看| 国产成人精品av在线| 成人毛片老司机大片| av中文字幕电影在线看| 3d精品h动漫啪啪一区二区| 国产精品少妇自拍| 一呦二呦三呦精品国产| 日本一区二区三区精品视频| 欧美性猛交xxxx免费看久久久| 97品白浆高清久久久久久| 裸体裸乳免费看| 7777精品伊人久久久大香线蕉| 99久久久久| 在线精品国产成人综合| 日本在线观看不卡视频| 美女羞羞视频在线观看| aaa级精品久久久国产片| 亚欧色一区w666天堂| 黑人久久a级毛片免费观看| 成人一区二区免费视频| 亚洲精品福利免费在线观看| av成人黄色| 成人网视频在线观看| 91网站免费观看| 午夜婷婷国产麻豆精品| 亚洲综合日韩欧美| 精品三级在线观看| 国产深夜精品| 黄色一级片在线观看| 国内精品一区二区| 欧美性色欧美a在线播放| 午夜日韩电影| 欧美另类自拍| 亚洲综合中文字幕在线| 疯狂欧美牲乱大交777| 一区二区三区四区在线观看国产日韩 | 成人午夜激情视频| 欧洲一区精品| 久久www视频| 尤物tv国产一区| 99久久综合99久久综合网站| 97色婷婷成人综合在线观看| 污污视频网站免费观看| 91国产在线精品| 亚洲大片在线观看| 亚洲精品888| 麻豆91在线| 亚洲高清久久久| 动漫一区二区在线| 欧美女孩性生活视频| 日韩五码在线| 蜜桃麻豆av在线| 日本中文字幕网址| 96精品视频在线| 欧美色播在线播放| 激情婷婷欧美| 亚洲美女尤物影院| 999在线免费视频| 国产精品最新在线观看| 在线视频国内自拍亚洲视频| 国产一级久久| 两个人看的在线视频www| www.爱色av.com| 高清国产一区二区| 色婷婷狠狠五月综合天色拍| 麻豆app在线观看| 在线观看欧美一区| 欧美日韩福利在线观看| 亚洲第一av色| 美女视频一区二区| silk一区二区三区精品视频| 福利资源在线久| 午夜一区二区三区| 久久久精品网站| 疯狂做受xxxx高潮欧美日本| 国产小视频免费在线网址| 99re视频在线| 亚洲天堂网站在线观看视频| 久久久久久久综合狠狠综合| 精品国产一级毛片| 最新超碰在线| 亚洲欧美国产中文| 久久久久欧美| 欧美成人亚洲成人| 色视频欧美一区二区三区| 国产又粗又猛又爽又黄91精品| 天堂日韩电影| sm在线观看| 男女小视频在线观看| 亚洲午夜精品一区二区| 国产做受69高潮| 日韩欧美综合| 欧美成人黑人| 水莓100在线视频| 亚洲熟妇无码av在线播放| 91免费综合在线| 操91在线视频| 欧美一区二区免费|