您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“怎么通過ASWebAuthenticationSession獲取身份驗(yàn)證Code碼”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
項(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)站作為一種服務(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。
你可以通過使用指向身份驗(yàn)證網(wǎng)頁的 URL 初始化實(shí)例來在應(yīng)用程序中使用網(wǎng)絡(luò)身份驗(yàn)證服務(wù)。
該頁面可以是你維護(hù)的頁面,也可以是由第三方操作的頁面。
通過打開瀏覽器登錄并獲取身份驗(yàn)證 code 碼,可以分為兩種情況:
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)
一種情況是在 App 內(nèi)部打開瀏覽器獲取身份驗(yàn)證
一種是打開手機(jī)自帶瀏覽器獲取身份驗(yàn)證
嘗試第一種情況之后 GitHub 和 Apple 均可以正常打開瀏覽器并且成功登錄拿到身份驗(yàn)證碼。
但是 Google 提示在 App 內(nèi)部打開登錄頁面是不安全的,因此只能選擇第二種方式。
建議使用 bundle id 保證唯一性。
var session: ASWebAuthenticationSession!
var session : ASWebAuthenticationSession! 需要設(shè)置為全局變量,設(shè)置為局部變量會(huì)被釋放掉導(dǎo)致彈框閃現(xiàn)。
func oauthLogin(type: String) { // val GitHub、Google、SignInWithApple let redirectUrl = "配置的 URL Types" let loginURL = Configuration.shared.awsConfiguration.authURL + "/authorize" + "?identity_provider=" + type + "&redirect_uri=" + redirectUri + "&response_type=CODE&client_id=" + Configuration.shared.awsConfiguration.appClientId session = ASWebAuthenticationSession(url: URL(string: loginURL)!, callbackURLScheme: redirectUri) { url, error in if error != nil { return } if let responseURL = url?.absoluteString { let components = responseURL.components(separatedBy: "#") for item in components { if item.contains("code") { let tokens = item.components(separatedBy: "&") for token in tokens { if token.contains("code") { let idTokenInfo = token.components(separatedBy: "=") if idTokenInfo.count > 1 { let code = idTokenInfo[1] print("身份驗(yàn)證 code 碼: \(code)") return } } } } } } } session.presentationContextProvider = self session.start() }
這里面有兩個(gè)參數(shù),一個(gè)是 redirectUri,一個(gè)是 loginURL。
redirectUri 就是 3.1 配置的白名單,作為頁面重定向的唯一標(biāo)示。
loginURL 是由 5 塊組成:
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)
服務(wù)器地址:Configuration.shared.awsConfiguration.authURL + "/authorize"
打開的登錄平臺(tái):identity_provider = "GitHub"
重定向標(biāo)識(shí):identity_provider = "配置的 URL Types"
相應(yīng)類型:response_type = "CODE"
客戶端 ID:client_id = "服務(wù)器配置"
回調(diào)中的 url 包含我們所需要的身份驗(yàn)證 code 碼,需要層層解析獲取 code。
告訴代理應(yīng)該在哪個(gè) window 展示授權(quán)界面給用戶
#pragma mark - ASAuthorizationControllerPresentationContextProviding extension ViewController: ASWebAuthenticationPresentationContextProviding { func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { return self.view.window ?? ASPresentationAnchor() } }
“怎么通過ASWebAuthenticationSession獲取身份驗(yàn)證Code碼”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。