ORY Hydra,Vapor 3和iOS 12的OAuth2实现

第4部分:使用AppAuth在iOS上设置OAuth2授权

关于使用ORY Hydra,Vapor和iOS设置OAuth2的系列教程的这一部分将重点介绍构建iOS客户端。 如果用户成功登录,它将是一个非常简单的应用程序,仅显示一个用于创建帐户的按钮并切换到成功消息。我们将使用一个名为AppAuth的库与我们的授权服务器进行交互。

教程系列

第1部分:ORY Hydra授权服务器的介绍和设置
第2部分:Vapor后端中的用户管理
第3部分:将Vapor后端设置为ORY Hydra的身份提供者
第4部分:使用AppAuth在iOS上设置OAuth2授权(您在此处)

先决条件

您应该检出上面列出的系列的先前部分。

创建iOS Xcode项目

打开Xcode或您选择的编辑器,然后创建一个新的Single View应用程序。 已经为您提供了ViewController.swift类,其视图已在情节提要中配置。

打开情节ViewController ,然后在ViewController上添加一个按钮,以触发身份验证流程。 然后添加带有成功消息的隐藏标签,在用户成功登录后,我们可以显示该标签。

接下来,打开ViewController.swift文件,并拖动其中两个按钮的插座,以及一个按钮操作的插座。 调用该函数authorize

另外,我们需要允许该应用处理非SSL URL。 为此,我们需要在Info.plist添加另一个名为App Transport Security Settings条目:

触发授权请求

创建授权请求后,我们现在需要实际触发该请求。 我们可以使用AppAuth提供的便利功能来创建一个新的OIDExternalUserAgentSession ,并将其保存在AuthService 。 将此行添加到我们的AuthService的顶部:

在AuthService.swift中保留当前的身份验证流

然后修改authorize看起来像这样:

AuthService.swift中的授权功能

首先,我们将函数的签名更改为采用UIViewController以及成功和错误情况的回调。 然后,通过使用之前创建的请求创建新的授权会话来触发授权请求。

创建授权会话后,我们将收到OIDAuthState对象或错误。 OIDAuthStateOIDAuthState提供的便利类,其中包含有关用户授权状态的所有相关信息。

返回到ViewController并在点击创建帐户按钮时调用此函数。

在ViewController.swift中授权功能

我们创建了AuthService的实例,并在按钮点击时调用authorize 。 如果我们可以成功授权用户,则显示成功消息而不是按钮。

iOS部分就是这样。

测试我们的设置

现在,我们开发了实现OAuth2授权所需的所有三个部分。 为了能够对其进行测试,我们需要启动Hydra服务器,运行后端并运行iOS客户端。

  1. 启动Hydra Server:回顾第1部分,并按照以下步骤启动Hydra Server并创建客户端
  2. 在Xcode中运行后端:只需在Xcode中启动Vapor后端的运行配置
  3. 在Xcode中运行iOS客户端:同样在这里,只需在Xcode中运行默认方案

在您的iOS模拟器中,您现在应该看到带有创建帐户按钮的白屏。 如果单击它,则应将您重定向到显示登录UI的Web浏览器。 尝试注册用户,然后查看成功消息。 您可以在第1部分的开头查看简短视频,以查看预期结果。

恭喜! 您已经完成了所有工作,并使用ORY Hydra,Vapor和iOS实现了自己的授权代码流程。

前景展望

我们计划为本教程编写有关使用ORY Oathkeeper进行用户授权的后续部分,并准备好整个安装过程。

如果您对本教程或评论有任何疑问,请随时通过我们的网站与我们联系!

进一步阅读

AppAuth文档
https://github.com/openid/AppAuth-iOS

OAuth2手机版
https://www.ory.sh/oauth2-for-mobile-app-spa-browser

资源资源

您可以在Github上找到本教程完全实现的iOS应用!

保持更新

如果您喜欢本教程,并且对我们的其他文章感兴趣,请在此处或在Twitter上关注我们,并查看我们的网站!