版本记录
版本号 | 时间 |
---|---|
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 scheme
的URL
。 浏览器会检测到重定向,将其自身关闭,然后通过调用您在初始化期间指定的闭包将完整的URL传递给您的应用程序。
当您收到此回调时,请首先检查是否有错误。 例如,如果用户通过关闭浏览器窗口中止流程,则会收到canceledLogin
错误。 如果error
为nil
,请检查回调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中的用户进行身份验证,感兴趣的给个赞或者关注~~~
网友评论