只需简单的步骤,即可使用WSO2 Identity Server将单点登录(SSO)添加到您的iOS应用程序

在本教程中,我们将让用户使用WSO2 Identity Server凭据登录示例iOS应用程序。

1.安装和配置WSO2身份服务器

从官方网站下载最新版本的WSO2 Identity Server。 请参阅安装指南以在计算机中设置和运行服务器。 设置WSO2 IS时,您应该关注的关键点很少。

  • 确保在服务器中安装了有效的SSL证书。 这一步很重要,因为默认情况下,iOS应用程序被限制与没有有效证书的源进行通信。 但是,如果您在本地运行服务器并计划在iOS模拟器上测试该应用程序,则可以使用自签名证书并将其安装在服务器和模拟器上。 为此,请按照下列步骤操作。
  1. 按照此处的说明在服务器上安装自签名证书。
  2. 使用此工具将自签名证书导入iOS模拟器。
  3. 如果在本地运行WSO2 IS,则可以将解析的本地DNS条目添加到自定义域名,并为该特定域生成自签名证书。 如果执行此操作,请确保相应地更改WSO2 IS中的主机。 要将本地DNS条目添加到您的主机文件,只需点击此链接。
  • 登录到服务器仪表板并按照此处的指示创建“ 服务提供商”
  • 按照此处的说明创建“ OAuth入站身份验证器”
  • 创建OAuth入站供应应用程序时,请确保启用“ 允许不使用客户端凭据的身份验证”选项,如下图所示。 此选项将允许诸如本地移动应用程序之类的公共客户端绕过身份验证阶段。 此处说明了这样做的原因,并且本机OAuth 2.0规范也提供了详细说明。
  • 标记“ PKCE强制性”选项为选中状态。 使PKCE为强制性完全取决于用户。 但是,作为最佳实践,我们鼓励在开发本机移动应用程序时坚持PKCE协议。
  • 给“ wso2issample:// oauth ”作为回调URL。 这是示例应用程序的URI,将在本文档的后面部分进行说明。
  • 单击“添加”并复制生成的客户端ID。 我们将在应用程序中使用它。

我们已经完成设置和配置WSO2 Identity Server,让我们继续下一步。

2.设置示例iOS应用程序

我们是否必须从头开始创建iOS应用程序? 绝对不! WSO2的周到开发人员开发了一个示例iOS应用程序,您可以将其用作样板代码。 您可以从此处克隆或下载WSO2 Identity Server的示例应用程序存储库。

在Xcode中打开应用程序之前,您需要在Mac上安装流行的Swift和Objective-C项目依赖管理系统CocoaPods。 完成后,转到以下目录并双击“ WSO2-IS-SampleApp.xcworkspace”工作空间文件,该项目将以Xcode打开。 确保不要打开WSO2-IS-SampleApp.xcodeproj项目文件,因为它不会正确解析CocoaPods依赖项。

   / oidc-client-app-samples / ios-client-app-sample 

样本申请结构

这是WSO2 Identity Server提供的示例iOS应用程序的文件结构。

让我们看一下这个特定应用程序的关键元素。

  • AppDelegate.swift —默认的委派类,观察应用程序状态的变化
  • Main.storyboard-应用程序的主故事板
  • Config.plist —此配置文件包含身份提供者详细信息以及OAuth客户端ID
  • 控制器目录 -用于登录视图和配置文件视图的视图控制器
  • 模型目录 —模型数据对象
  • 管理(mgt)目录-管理类
  • 实用程序(utils)目录 -实用程序类
  • 资源目录 -应用程序中使用的资源文件
  • 服务目录 -此目录包含处理OAuth通信的服务类。 这将在后面的部分中进一步讨论

依存关系和第三方库

如前所述,我们将CocoaPods用作该项目的依赖项管理器。 依赖关系在“ Pods”文件中定义,您可以通过导航到项目根文件夹并运行以下命令来简单地安装它们。 但是,您不需要执行此步骤,因为它们已经包括了依赖项以及源代码。

  吊舱安装 

在此应用程序中,我们将AppAuth for iOS用作第三方库,用于在应用程序和WSO2 Identity Server之间进行OAuth 2.0通信。 已将AppAuth库作为依赖项添加到pod文件中,请注意,由于master分支中与注销功能相关的多个问题,我们正在使用AppAuth for iOS库的开发分支( dev-logout分支)。 但是,您不必为此担心,因为库已包含在该项目中。 您将在Pods文件中找到以下行。

  pod'AppAuth',:git =>'https://github.com/openid/AppAuth-iOS.git',:branch =>'dev-logout' 

Cocoa框架将从指定的’ dev-logout ‘分支下载源代码并将其添加到项目中。

但是,如果您不需要从身份服务器注销,而是希望从应用程序中注销用户并使会话无效,则可以使用常规的AppAuth for iOS库,只需将以下行替换为该行,然后删除日志记录即可从代码中删除相关的实现。

  pod'AppAuth' 

配置应用程序设置

在项目的根文件夹中,您将找到“ Info.plist”文件,其中包含有关该应用程序的所有配置详细信息。 右键单击它,然后单击打开为源代码 。 请注意以下配置。

CFBundleURLTypes”属性用于定义应用程序的URL方案。 URL方案是iOS应用程序相互通信的机制。 在此应用程序中,我们使用的是称为“ wso2issample ”的自定义URL方案,现在您可以理解为什么在WSO2 Identity Server中创建OAuth服务提供程序时为什么将“ wso2issample:// oauth ”用作回调URL。 身份验证完成后,将通过此URL将用户重定向到应用程序。 您可以通过简单地如上定义注册任何您喜欢的URL方案。

如果在本地运行WSO2 Identity Server,则必须具有以下配置才能成功测试该应用程序。 请注意同一文件中的以下属性。

在这里,我们启用了应用程序以允许使用不受信任的证书连接到源。 但是,不建议在生产环境中执行此操作,因此请确保在发布应用程序以在应用商店中进行审核之前删除此属性。

配置端点和OAuth客户端设置

config.plist文件包含身份服务器端点的配置信息。 打开该文件作为源代码,您将在此文件中找到几个与OAuth相关的属性。

前几个属性是WSO2 Identity Server OAuth 2.0 API的端点,您必须使用配置的主机名替换主机名( wso2is.local )。 确保使用前面在RedirectURL属性中创建的相同URL方案。 另外,您需要将生成的客户端ID放入“ ClientID ”属性中。 我们不需要客户端机密,因为我们使用的是WSO2身份服务器提供的基于PKCE的身份验证功能。

完成所有这些步骤后,您可以在模拟器或实际的iOS设备中运行该应用程序。

申请流程

让我们看一下应用程序流程。 该应用程序具有两个主要的用户界面:登录屏幕和配置文件屏幕。