# IDP2-OIDC-NativeApp-IOS
**Repository Path**: bjzyt/IDP2-OIDC-NativeApp-IOS
## Basic Information
- **Project Name**: IDP2-OIDC-NativeApp-IOS
- **Description**: OIDC Native APP IOS
- **Primary Language**: Swift
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 21
- **Forks**: 4
- **Created**: 2016-12-28
- **Last Updated**: 2025-02-25
## Categories & Tags
**Categories**: ios-modules
**Tags**: None
## README
IDP-OIDCNativeApp- iOS - 开发文档
更新时间 2017年1月
文档版本号 1.0.0
IDP-OIDCNativeApp公开使用,用于开发者集成参考。
### 一、介绍
北京九州云腾科技有限公司的IDP产品的口号是统一身份、安全便捷,而IDP单点登录iOS 能够实现IDP身份管家到第三方开发者应用的身份管理和单点登录。
如果对于IDP不熟悉的话,可以联系我们info@idsmanager.com,或者去我们公司的网站http://www.idsmanager.com 详细了解。IDP产品针对的是企业级用户,单点登录。我们为你提供了一个开源地demo应用IDP-OIDCNativeApp,在 MIT License 下可以随意参照修改。该demo应用使用xcode8.0和Swift 3.0开发,如果您的开发方式不一致,可能会导致未知错误。
**集成OIDCNaitveApp之后,通过IDP身份管家实现如下效果(也可以集成我们的SDK将IDP身份管家替换成自己的APP):**
1.通过IDP身份管家点击集成的OIDCNativeApp
2.选择您要单点登录的用户(如果只关联一个用户则直接跳转到OIDCNativeApp应用单点登录)
3.打开OIDCNativeApp并且根据你选择的用户实现单点登录

**流程图:**

第1步:登录IDP身份管家,点击需要打开的应用,请求IDP Server去获取Token
第2步:IDP Server返回rpToken和idToken给IDP身份管家(Token是客户端请求登录的凭证)
第3步:IDP身份管家通过URL跳转打开集成了OIDC Native App的APP,Web通过URL传递Token给客户端。
第4步:集成了OIDC Native App的APP通过解析URL获取传过来的rpToken、idToken
第5步:App通过获取到的rpToken、idToken,请求RP Server,进行登录请求
第6步:RP Server接收到请求后,去IDP Server验证rpToken、idToken
第7步:IDP Server 返回验证结果给RP Server
第8步:RP Server 处理IDP Server返回的结果,根据结果返回相对的结果给App
**已实现的功能:**
用OIDC的token验证方式从IDP身份管家跳转到第三方应用,并且获取到由应用:IDP身份管家 传来的参数信息,以在本地应用中无缝连接单点登录,直接进入登录状态。
系统版本支持:
iOS9.0+
如有问题,请联系info@idsmanager.com,或致电 010-58732285。
### 二、使用IDP-OIDCNativeApp
使用IDPNativeApp一共有三步。
1. 前往Targets -> Info -> URL Types新创建一个URL Type,这之中唯一必填的内容就是 URL Schemes,该项代表着在app之间跳转的唯一标识,在之后的网页上的步骤中会需要填写。URL Scheme不需要和bundle ID或者应用名称一致。

2. 在AppDelegate中添加方法(Demo中提供的是Swift3版本,请自行转换成您开发所使用的对应版本):
```
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
/******************************** 接收处理跳转传过来的参数 ******************************/
if url.scheme == "iOSOIDCNative" {
let notice = NSNotification.init(name: NSNotification.Name(rawValue: "LoginNotification"), object: nil)
NotificationCenter.default.post(notice as Notification)
UserDefaults.standard.set(self .getIdToken(infoURL: url as NSURL), forKey: "OIDCToken")
self.perform(#selector(postNotifation),with: nil,afterDelay: 0.1)
}
return true
}
func postNotifation() {
let notice = NSNotification.init(name: NSNotification.Name(rawValue: "OIDCAutomaticLogin"), object: nil)
NotificationCenter.default.post(notice as Notification)
}
```
3.如果从SP发起,去IDP授权后登录需要调用,IDPNativeAppSDK.open(),参数scheme是调起应用的URL Scheme,appType调起应用的类型,paramString参数: paramString格式: username=xxx&age=xxx&phonexxxx
```
IDPNativeAppSDK.open(scheme: "jiuzhou", appType: IDPNativeAppType.IDP_BasicNativeApp, paramString: "username=lisi&xxx=xxx){ (success) in
print(success)
}
```
4.获取单点登录的token,IDPNativeAppSDK.getIdToken(infoURL:"url")
```
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
IDPNativeAppSDK.getIdToken(infoURL: url as NSURL)
}
```
本方法会出当从IDP身份管家应用中跳转过来时候通过URL解析出需要的rpToken、idToken。
### Framework安装方法
1. 从我们的网站直接下载sdk的framework包,或者从demo应用IDPNativeApp https://git.oschina.net/sz_ids/IDP2-NativeApp-IOS 中直接获取IDPNativeAppSDK.framework。
2. 将IDPNativeAppSDK.framework拖入到项目中的framework文件夹中。

3. 在Targets -> General 中下方有一栏叫做Embedded Binaries,将我们的IDPNativeAppSDK添加进去。
1. 点击下方的 + 号
2. 在Frameworks中选取IDPNativeAppSDK
3. 成功将SDK添加到Embedded Binaries中

尝试build或运行。如果没有出错误的话,到这里SDK的安装就完成了,下面要介绍在Xcode中如何设置和使用SDK。如果在这一步出现错误的话,请删掉重复上面的步骤。您也可以打开我们的demo应用来看我们的集成结果,互相比较。
5 . 最后,在希望获取到用户的账户信息的地方,调用获得的参数发起接口请求(请参照服务器集成文档),如果需要多次使用用户信息,请自行保存。
到这里,Xcode中的设置和使用也已经全部完成,我们现在需要在IDP页面上为本应用配置信息。
### 三、IDP单点登录设置
IDP(Identity Provider)产品市场名称为:IDP身份管家,支持iOS和Android,在App Store和应用宝上可以下载到。该产品是IDP产品线的重要组成部分,配合网页端可以做到安全、便捷地统一管理和使用自己的账号身份信息。IDP身份管家对于本地应用的身份管理支持,是移动端实现统一所有网络身份的重要模块。IDP提供的本SDK,目的是为企业开发者提供一个可以接入IDP的方法,能够实现从IDP应用到第三方开发应用的账号管理和单点登录。
想要实现IDP的统一账号管理和单点登录,您所在的公司必须要正在使用IDP产品,并且您必须拥有管理员权限。开发者权限是不能够添加IDP-OIDCNativeApp应用的,请注意
1 . 在管理员的IDP界面中,点击添加应用,搜索OIDCNativeApp,这里看到的使我们提供的统一模板,我们使用这个模板,点击添加应用。(如果没有找到该模板,请与九州云腾联系)

2 . 继续填写需要添加的应用内容。
所属领域:请根据情况选择最合适的,这里的选项不会影响到应用的实现
iOS/Android Scheme URL
iOS 的Scheme Url填写您在第二节第一步在Xcode中创建的URL Scheme
账号关联方式:这里选择您希望通过什么方式从IDP身份管家把用户的身份信息传递给你的应用,我们目前支持账号密码的方式和OIDC的token方式。本文档适用于OIDC的token方式

3. 请为应用授权用户,以便能让公司用户开始使用。如果您知道如何授权应用,请自行授权并跳过本节讲解。
- 如何授权:授权指的是将一个企业添加进来的应用交给用户使用的过程。IDP系统中,应用添加好以后,需要授权给用户组,如果应用实在开启(默认)的状态的话,那么该用户组的人就可以在他们的IDPs侯爷看到新添加进来的应用。
- 从左侧进入授权菜单
- 从列表中选择刚创建的应用
- 添加新授权
- 在新页面中选择想要授权的用户组,比如测试组,管理组等。
- 如果未创建用户组,可以自行创建。如果未添加用户,请先添加用户,并将其归入一个用户组内。

4. 应用到这步已经添加完成,但是我们还需要为授权的用户组中的用户添加该用户在该应用的账号信息,这样才能一一对应将这些信息在跳转时传入第三方应用。如果您知道如何授权添加应用子账号,请自行授权并跳过本节讲解。
1. 退出登录,并以刚才授权过的用户组中某个用户的身份重新登录系统。如果您刚才的管理员是授权成员组成员之一,那么您不需要登出,只要在右上方导航条下拉菜单中选择用户界面即可跳转到用户身份。
2. 进入应用子账号菜单,会看到你的所有被授权的应用所添加的账号信息的列表。点击右上角的添加应用子账号按钮。

3. 在添加界面中选择正确的应用,并且填入对应您第三方应用有效身份信息的用户名密码。比如我开发了应用叫做「微信改」,我在这里天蝎的就是我希望IDP身份管家能帮我管理,并实现单点登录的对应「微信改」账号。这个账号应该在您应用自己的系统中注册并可以使用。
- 如果您在尝试使用IDPNativeApp这个Demo应用,请在运行OIDCNativeAp后点击注册按钮,并将注册好的信息填写在本步骤中。
4. 您可以为同一个应用添加多个需要管理的账号,IDP身份管家会在跳转前询问您需要使用哪一个

我们从前到后,配置好了URL Scheme,在IDP网页端创建好了应用对应了URL Scheme,在授权给目标群组之后,在用户界面给该用户自己添加了目标应用的账号信息。
到此,您的应用应该能够使用IDP身份管家来管理和登录您的应用了!
如果您有宝贵的意见请随时与我们联系info@idsmanager.com 。我们会在未来为IDP使用者和开发者提供更完备的SDK功能,敬请期待!
北京九州云腾团队
2017年1月