跳转至

App2App 登录

来自英国的用户可能对这种方式并不陌生,许多新型银行(neobank)都在使用 app2app 机制来授权从一个银行应用向另一个银行应用转账。

App2App 机制允许一个应用借助安装在同一设备上、且已连接到身份验证服务器的另一个应用来完成用户身份验证。这是通过通用链接(universal link)实现的,两个应用无需通过系统浏览器共享会话,也无需通过令牌存储共享刷新令牌。

说明

这是一项企业版功能,如需在您的项目中使用 App2App 流程,请通过 https://authany.com/talk-with-us 联系我们

请注意,这并不是单点登录功能。如果您是在同一品牌下提供多个应用,并希望用户在设备上的这些应用之间共享登录会话,您应该使用单点登录。以下情况应使用 App2App:

  • 无法通过浏览器 Cookie 共享会话
  • 无法通过公共令牌存储共享会话

App2App 登录流程演示

机制

一个应用可以通过打开指向另一个应用的链接来启动身份验证流程,而不使用授权端点。处理该链接的应用会验证身份验证请求,然后可以返回一个有效的授权码。该有效授权码随后通过通用链接传递给最初发起请求的应用。发起方应用可以使用这个授权码向 Authany 发起代码交换以获取令牌。

iOS 上的 App2App 流程

关于该技术的详细说明,可参阅这份规范文档。

在 Authany 中进行设置

说明

这是一项企业版功能,如需在您的项目中启用 App2App 流程,请通过 https://authany.com/talk-with-us 联系我们

在授权方应用中进行配置

  1. 进入授权方应用(即处理 app2app 身份验证请求的应用)的应用详情页。
  2. 滚动到页面底部,您会看到 App2App 配置面板。
  3. 选择「为此应用启用 App2App 登录」
  4. 迁移模式提供了一种安全性较低的机制,用于帮助较旧的用户会话参与 App2App。除非存在迁移问题,否则请勿启用该选项。

在发起方应用中进行配置

  1. 进入发起方应用(即发起 app2app 身份验证请求的应用)的应用详情页。
  2. 在重定向 URI 中,应设置一个能够打开该应用的通用链接。

设置这些应用

  1. 为两个应用分别定义并设置通用链接,例如:
  2. https://a.example.com/authorize 应打开授权方应用(App A)
  3. https://b.example.com/redirect 应打开发起方应用(App B)
  4. 在 App B 中,调用 startApp2AppAuthentication(options: App2AppAuthenticateOptions) 来发起 app2app 登录
  5. App2AppAuthenticateOptions.authorizationEndpoint 应为指向 App A 的通用链接 URL,即 https://a.example.com/authorize
  6. App2AppAuthenticateOptions.redirectUri 应为授权方应用返回身份验证结果所用的 URI,必须是能打开当前应用的通用链接,即 https://b.example.com/redirect
  7. 在 App A 中,收到 app2app 登录请求后
  8. 调用 parseApp2AppAuthenticationRequest(url: URL): App2AppAuthenticateRequest?
  9. 如果该 URL 不是有效的 app2app 请求,返回结果将为 null。
  10. 您可以在 App A 中批准或拒绝该 app2app 请求
  11. 批准:approveApp2AppAuthenticationRequest(request: App2AppAuthenticateRequest)
    • 批准一个 app2app 请求,并通过重定向 URI 返回结果。
    • request 应为 parseApp2AppAuthenticationRequest 的返回值。
    • 此方法必须在 SDK 会话状态为 AUTHENTICATED,且当前会话已通过提供 device_key 支持 app2app 身份验证时调用,否则将抛出错误。
  12. 拒绝:rejectApp2AppAuthenticationRequest(request: App2AppAuthenticateRequest, error: Error)
    • 拒绝一个 app2app 请求,并通过重定向 URI 返回错误。
    • request 应为 parseApp2AppAuthenticationRequest 的返回值。
    • error 为拒绝该请求的原因。
  13. 返回 App B 后,调用 handleApp2AppAuthenticationResult(url: URL)
  14. 该方法应由发起 app2app 身份验证流程的应用调用;当通过通用链接收到结果时,url 应为收到的通用链接 URL。