美文网首页
Authentication Services框架详细解析 (五

Authentication Services框架详细解析 (五

作者: 刀客传奇 | 来源:发表于2021-04-01 13:00 被阅读0次

    版本记录

    版本号 时间
    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中的用户进行身份验证,感兴趣的给个赞或者关注~~~

    相关文章

      网友评论

          本文标题:Authentication Services框架详细解析 (五

          本文链接:https://www.haomeiwen.com/subject/vblzhltx.html