Tag: Ory Hydra

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对象或错误。 OIDAuthState是OIDAuthState提供的便利类,其中包含有关用户授权状态的所有相关信息。 返回到ViewController并在点击创建帐户按钮时调用此函数。 在ViewController.swift中授权功能 我们创建了AuthService的实例,并在按钮点击时调用authorize 。 如果我们可以成功授权用户,则显示成功消息而不是按钮。 iOS部分就是这样。 测试我们的设置 现在,我们开发了实现OAuth2授权所需的所有三个部分。 为了能够对其进行测试,我们需要启动Hydra服务器,运行后端并运行iOS客户端。 启动Hydra Server:回顾第1部分,并按照以下步骤启动Hydra Server并创建客户端 […]

带有ORY Hydra,Vapor 3和iOS 12的OAuth2

在本教程中,我们尝试为您提供有关如何使用iOS应用,Vapor API和Hydra作为OAuth2服务器来实现OAuth2授权代码流的广泛理解。 教程系列 第1部分:ORY Hydra授权服务器的介绍和设置(您在这里) 第2部分:Vapor后端中的用户管理 第3部分:将Vapor后端设置为ORY Hydra的身份提供者 第4部分:使用AppAuth在iOS上设置OAuth2授权 您至少需要Mac才能构建iOS应用。 这对于调试Vapor后端也很有帮助。 您需要安装Docker(https://www.docker.com/get-started) 您应该对OID2授权代码与OpenID Connect的工作原理有基本的了解。 有很多资源,例如,您可以查看DigitalOcean的介绍。 请注意,本教程将仅在您的本地计算机上设置所有内容,并且被认为不适合生产。 例如,我们会将客户端机密存储在iOS应用程序中,您绝对不要这样做。 如果有需求,我们可能会在本教程的其他部分中着重于使整个设置生产就绪。 我们正在开发一个涉及安全性的产品,因此,依靠最佳实践用户身份验证绝对是必经之路。 设置OAuth2通常很麻烦。 ORY Hydra减轻了您实现自己的OAuth2服务器的负担,但仍要求/允许您使用自己的身份提供者。 这使我们感到困惑,哪些身份验证流程的哪些部分需要作为身份提供者的一部分在我们的后端中实现,哪些部分由Hydra提供。 在本教程中,我们将尝试更清楚地说明在开发使用Vapor后端和Hydra作为OAuth2服务器的iOS应用时,每个部件要承担什么责任。 这是我们完成后应用程序的外观: iOS应用 iOS应用程序本质上将非常简单,并且仅具有两个本机屏幕:登录提示屏幕和成功屏幕,向您显示您已成功验证用户身份。 我们将使用AppAuth在应用程序内部处理OAuth令牌。 蒸气后端 蒸气后端将包含用户管理,并且还将作为身份和同意提供者来提供HTML登录和注册屏幕。 同意步骤将自动跳过,因为像这样的第一方应用程序不需要此步骤。 我们可以假设一个想要在我们平台上登录的用户也想要为其数据授予访问权限。 ORY九头蛇 Hydra是一个开放源代码的OAuth2服务器,它通过将用户身份验证(登录,注册)委派给身份提供者(在本例中为Vapor后端)来管理授权流程。 如果成功,它将发出访问令牌,刷新令牌和ID令牌,这些令牌可用于验证后端访问受限数据(即用户个人资料)的请求。 这可能已经令人困惑,所以让我们通过分解设置所需的内容来更好地理解它: iOS应用程序需要了解Hydra服务器的身份验证和令牌终结点(公共API),但是它们完全由AppAuth库管理。 Vapor后端需要有权访问Hydra服务器的管理端点(管理API)以发起和接受登录和同意请求。 Hydra需要知道您的Vapor后端上的登录(或注册)端点和同意端点,以便将身份验证委派给您的身份提供者。 您在Hydra中创建的客户端还需要一个回调URL,以便Hydra在身份验证过程完成后知道重定向到的位置(这是一个自定义URL方案,链接到iOS应用)。 流程示例 让我们看一下用户想要注册帐户时应该发生的交互流程: 请注意,星号前缀的“实体名称”不是实际的类型,仅用于在不同阶段引用同一段代码/数据(例如“ * AuthCallback”,“ * RegistrationInput”等)。 这些图主要作为概述,您可以在本教程系列的整个课程中继续学习。 需要花很多时间,但是请记住,我们只需要实现非虚线字段并设置蓝色的Hydra部分。 在本教程的其余部分中,我们将重点关注后者。 希望您现在对我们将在此处构建的内容有了更好的了解。 现在是时候深入研究实际的实现了。 好吧……不是真的。 由于Hydra已经实现,因此只需使用一些参数启动它,并且您需要为应用程序创建一个客户端。 启动Hydra实例 […]