Authentication Services框架详细解析 (五) —— 使用web authentication session对App中的用户进行身份验证(一)

版本记录

版本号 时间
V1.0 2021.04.01 星期四

前言

Authentication Services框架为用户提供了授权身份认证Authentication服务,使用户更容易登录App和服务。下面我们就一起来看一下这个框架。感兴趣的看下面几篇文章。
1. Authentication Services框架详细解析 (一) —— 基本概览(一)
2. Authentication Services框架详细解析 (二) —— 使用Sign in with Apple实现用户身份验证(一)
3. Authentication Services框架详细解析 (三) —— 密码的自动填充(一)
4. Authentication Services框架详细解析 (四) —— 使用Account Authentication Modification Extension提升账号安全(一)

Overview

首先看下主要内容:

使用web authentication session对您的应用程序中的用户进行身份验证。

一些网站作为一种服务提供了一种用于验证用户身份的安全机制。 当用户导航到网点的authentication URL时,站点将向用户提供一个表单以收集凭据。 验证凭据后,该网络站点通常使用custom scheme将用户的浏览器重定向到指示身份验证尝试结果的URL。


Create a Web Authentication Session

通过使用指向身份验证网页的URL初始化ASWebAuthenticationSession实例,可以在应用程序中使用web authentication service。 该页面可以是您维护的页面,也可以是由第三方操作的页面。 在初始化期间,指示页面用于返回认证结果的回调scheme

// Use the URL and callback scheme specified by the authorization provider.
guard let authURL = URL(string: "https://example.com/auth") else { return }
let scheme = "exampleauth"

// Initialize the session.
let session = ASWebAuthenticationSession(url: authURL, callbackURLScheme: scheme)
{ callbackURL, error in
    // Handle the callback.
}

验证完成后,请使用初始化程序的结尾闭包告诉会话如何处理回调,如下面Handle the Callback中所述。

macOS中,或者如果您具有iOS 13或更高版本的deployment target,则会话将保留对自身的强引用,直到身份验证过程完成为止,以防止系统取消分配的闭包。 对于较早的iOSdeployment target,您的应用需要对会话保持强引用,直到身份验证完成。


Provide a Presentation Context

您的应用通过采用ASWebAuthenticationPresentationContextProviding协议来指示应充当会话的presentation anchor的窗口。 从protocolAnchorForWebAuthenticationSession:方法(该协议的required方法)中,返回应充当锚点anchor的窗口:

extension ViewController: ASWebAuthenticationPresentationContextProviding {
    func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
        return view.window!
    }
}

创建会话后,将适当的上下文provider instance设置为会话的presentationContextProvider委托:

session.presentationContextProvider = viewController

Optionally Request Ephemeral Browsing

您可以通过将会话的preferredsEphemeralWebBrowserSession属性设置为true来配置会话以请求临时浏览:

session.prefersEphemeralWebBrowserSession = true

此设置要求浏览器在身份验证过程中避免使用任何现有的浏览数据,例如cookie。 它还要求浏览器避免保留在身份验证尝试期间收集的所有数据,而不是尝试的生存期,或与其他任何会话共享。 临时会话可提高安全性,但可以防止重复使用先前成功进行身份验证的结果,从而可能迫使用户重新输入凭据。 因此,通常最好让用户选择是否请求临时浏览。

Safari始终尊重请求。 在macOS中,用户可以选择可能会或可能不会遵守请求的其他默认浏览器。

注意:当不使用临时会话时,浏览器可以使用除会话cookie之外的所有cookie


Start the Authentication Flow

配置会话后,调用其start方法:

session.start()

iOS中,会话会将您在初始化期间指示的身份验证网页加载到嵌入式浏览器视图中。 在macOS中,如果会话处理身份验证会话,则会话会将页面加载请求发送到用户的默认浏览器,否则发送到Safari。 无论如何,浏览器都会向用户显示身份验证页面,该页面通常是用于输入用户名和密码的表格。

您可以在用户完成操作之前通过调用会话的cancel方法从应用中取消身份验证尝试:

session.cancel()

取消时,会话将自动关闭相应的浏览器视图。


Handle the Callback

用户进行身份验证后,authentication provider会将浏览器重定向到使用callback schemeURL。 浏览器会检测到重定向,将其自身关闭,然后通过调用您在初始化期间指定的闭包将完整的URL传递给您的应用程序。

当您收到此回调时,请首先检查是否有错误。 例如,如果用户通过关闭浏览器窗口中止流程,则会收到canceledLogin错误。 如果errornil,请检查回调URL以确定身份验证的结果:

guard error == nil, let callbackURL = callbackURL else { return }

// The callback URL format depends on the provider. For this example:
//   exampleauth://auth?token=1234
let queryItems = URLComponents(string: callbackURL.absoluteString)?.queryItems
let token = queryItems?.filter({ $0.name == "token" }).first?.value

上面的示例查找存储为query参数的token。 您必须执行的特定解析取决于authentication provider如何构造回调URL。

后记

本篇主要讲述了使用web authentication session对App中的用户进行身份验证,感兴趣的给个赞或者关注~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,242评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,953评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,299评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,709评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,723评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,236评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,629评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,594评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,135评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,156评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,285评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,914评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,600评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,073评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,203评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,798评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,339评论 2 365

推荐阅读更多精彩内容