成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何通過 ASWebAuthenticationSession 獲取身份驗(yàn)證 Code 碼

開發(fā) 前端
當(dāng)用戶導(dǎo)航到站點(diǎn)的身份驗(yàn)證URL時(shí),站點(diǎn)將向用戶提供一個(gè)表單以收集憑據(jù)。驗(yàn)證憑據(jù)后,站點(diǎn)通常使用自定義方案將用戶的瀏覽器重定向到指示身份驗(yàn)證嘗試結(jié)果的URL。

 [[398919]]

本文轉(zhuǎn)載自微信公眾號「網(wǎng)羅開發(fā)」,作者展菲。轉(zhuǎn)載本文請聯(lián)系網(wǎng)羅開發(fā)公眾號。

1. 前言

項(xiàng)目中需要實(shí)現(xiàn) GitHub、Google、Apple 登錄,實(shí)現(xiàn)第三方登錄方案有 3 種:

  • 集成第三方一鍵登錄
  • 分別集成 GitHub、Google、Apple 登錄 SDK
  • 不集成 SDK 打開瀏覽器登錄

今天來講一下不集成 SDK 打開瀏覽器登錄獲取身份驗(yàn)證。

這需要使用 ASWebAuthenticationSession 獲取身份驗(yàn)證 code 碼。

網(wǎng)站登錄身份驗(yàn)證邏輯:

一些網(wǎng)站作為一種服務(wù)提供了一種用于驗(yàn)證用戶身份的安全機(jī)制。

當(dāng)用戶導(dǎo)航到站點(diǎn)的身份驗(yàn)證URL時(shí),站點(diǎn)將向用戶提供一個(gè)表單以收集憑據(jù)。

驗(yàn)證憑據(jù)后,站點(diǎn)通常使用自定義方案將用戶的瀏覽器重定向到指示身份驗(yàn)證嘗試結(jié)果的URL。

2. 不集成 SDK 打開瀏覽器登錄

你可以通過使用指向身份驗(yàn)證網(wǎng)頁的 URL 初始化實(shí)例來在應(yīng)用程序中使用網(wǎng)絡(luò)身份驗(yàn)證服務(wù)。

該頁面可以是你維護(hù)的頁面,也可以是由第三方操作的頁面。

通過打開瀏覽器登錄并獲取身份驗(yàn)證 code 碼,可以分為兩種情況:

  1. 一種情況是在 App 內(nèi)部打開瀏覽器獲取身份驗(yàn)證
  2. 一種是打開手機(jī)自帶瀏覽器獲取身份驗(yàn)證

嘗試第一種情況之后 GitHub 和 Apple 均可以正常打開瀏覽器并且成功登錄拿到身份驗(yàn)證碼。

但是 Google 提示在 App 內(nèi)部打開登錄頁面是不安全的,因此只能選擇第二種方式。

3. 打開手機(jī)自帶瀏覽器獲取身份驗(yàn)證

3.1 配置 URL Types

建議使用 bundle id 保證唯一性。

3.2 定義全局變量

  1. var session: ASWebAuthenticationSession! 

var session : ASWebAuthenticationSession! 需要設(shè)置為全局變量,設(shè)置為局部變量會被釋放掉導(dǎo)致彈框閃現(xiàn)。

3.3 獲取身份驗(yàn)證 code 碼

  1. func oauthLogin(type: String) { 
  2.     // val GitHub、Google、SignInWithApple 
  3.     let redirectUrl = "配置的 URL Types" 
  4.     let loginURL = Configuration.shared.awsConfiguration.authURL + "/authorize" + "?identity_provider=" + type + "&redirect_uri=" + redirectUri + "&response_type=CODE&client_id=" + Configuration.shared.awsConfiguration.appClientId 
  5.     session = ASWebAuthenticationSession(url: URL(string: loginURL)!, callbackURLScheme: redirectUri) { url, error in 
  6.         if error != nil { 
  7.             return 
  8.         } 
  9.         if let responseURL = url?.absoluteString { 
  10.             let components = responseURL.components(separatedBy: "#"
  11.             for item in components { 
  12.                 if item.contains("code") { 
  13.                     let tokens = item.components(separatedBy: "&"
  14.                     for token in tokens { 
  15.                         if token.contains("code") { 
  16.                             let idTokenInfo = token.components(separatedBy: "="
  17.                             if idTokenInfo.count > 1 { 
  18.                                 let code = idTokenInfo[1] 
  19.                                 print("身份驗(yàn)證 code 碼: \(code)"
  20.                                 return 
  21.                             } 
  22.                         } 
  23.                     } 
  24.                 } 
  25.             } 
  26.         } 
  27.     } 
  28.     session.presentationContextProvider = self 
  29.     session.start() 

這里面有兩個(gè)參數(shù),一個(gè)是 redirectUri,一個(gè)是 loginURL。

redirectUri 就是 3.1 配置的白名單,作為頁面重定向的唯一標(biāo)示。

loginURL 是由 5 塊組成:

  1. 服務(wù)器地址:Configuration.shared.awsConfiguration.authURL + "/authorize"
  2. 打開的登錄平臺:identity_provider = "GitHub"
  3. 重定向標(biāo)識:identity_provider = "配置的 URL Types"
  4. 相應(yīng)類型:response_type = "CODE"
  5. 客戶端 ID:client_id = "服務(wù)器配置"

回調(diào)中的 url 包含我們所需要的身份驗(yàn)證 code 碼,需要層層解析獲取 code。

3.4 指定授權(quán)界面顯示的 window

告訴代理應(yīng)該在哪個(gè) window 展示授權(quán)界面給用戶

  1. #pragma mark - ASAuthorizationControllerPresentationContextProviding 
  2. extension ViewController: ASWebAuthenticationPresentationContextProviding { 
  3.     func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { 
  4.         return self.view.window ?? ASPresentationAnchor() 
  5.     } 

 

責(zé)任編輯:武曉燕 來源: 網(wǎng)羅開發(fā)
相關(guān)推薦

2020-08-04 08:04:46

VueAPI驗(yàn)證

2010-09-06 11:24:47

CHAP驗(yàn)證PPP身份驗(yàn)證

2022-10-31 10:00:00

2012-04-10 09:36:58

2013-07-21 18:32:13

iOS開發(fā)ASIHTTPRequ

2011-02-21 10:54:45

2025-04-25 07:00:00

身份驗(yàn)證CISO無密碼

2020-05-26 14:18:41

RPC協(xié)議NTLM

2010-07-17 00:57:52

Telnet身份驗(yàn)證

2010-11-30 15:31:38

SharePoint Kerberos

2021-07-19 10:10:15

身份驗(yàn)證漏洞Windows Hel

2010-11-03 16:07:38

DB2身份驗(yàn)證

2022-11-03 14:33:32

2022-11-02 11:42:02

2017-09-01 12:38:20

windows服務(wù)器windows 200

2014-06-27 10:31:52

2012-10-23 16:12:35

2011-05-10 09:09:36

身份驗(yàn)證HID Global

2015-01-28 10:00:49

2021-08-30 14:23:41

身份驗(yàn)證隱私管理網(wǎng)絡(luò)安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品久久久久久久久久久久 | 天堂综合网久久 | 亚洲网站在线观看 | 午夜丰满少妇一级毛片 | 国产精品一区一区 | 中文字幕高清av | 久久97精品 | 蜜桃传媒一区二区 | 国内在线视频 | 在线播放国产一区二区三区 | 国产激情片在线观看 | 日韩激情在线 | 精品国产乱码久久久久久蜜臀 | 日本中文字幕日韩精品免费 | 麻豆国产一区二区三区四区 | 成人网址在线观看 | 妖精视频一区二区三区 | 欧美精品久久久 | 欧美日韩亚洲国产综合 | 成人av播放 | 在线 丝袜 欧美 日韩 制服 | xxxxx黄色片| 欧美成人精品在线观看 | 日韩有码一区 | 国产精品久久久久久52avav | 成人在线不卡 | 黄网站在线播放 | 日韩一区二区三区av | 在线视频99 | 国产精品一区二区在线免费观看 | 欧美精品在线一区二区三区 | 国产成人精品午夜 | 亚洲精久| 黄色播放 | 国产精品免费一区二区三区四区 | 蜜桃视频在线观看免费视频网站www | 亚洲首页 | 成人精品视频99在线观看免费 | 99亚洲精品 | 国产乱码精品一品二品 | 亚洲一区二区黄 |