测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2016年2月 |
由Richard Puckett维护。
依赖 | |
AFNetworking | >= 0 |
JSONModel | >= 0 |
要开始OAuth流程,请使用beginConcurAuthentication
方法。提供您的客户端ID、作用域值数组和显示的视图控制器,以及回调处理程序。
此方法将向用户展示一个单次使用的viewcontroller,其中包含一个UIWebView。WebView将包含由Concur托管的登录页面,用户可以直接使用该页面将自己的用户名和密码提供给Concur进行认证。
如果登录不成功,则将返回错误;否则,将向处理程序提供短期代码(nonce),处理程序必须将其交换为令牌。没有通用的完成此步骤的方法,因此将其留给客户端代码在自己的环境中实现。通常是通过将nonce发送到客户端拥有的web服务来完成,web服务会负责将nonce(以及客户端的私钥)发送到Concur的代码交换web服务。这在演示应用程序中有一个示例。
一旦成功交换nonce,客户端应该从交换响应中创建AccessToken对象的实例,并将其传递给ConcurClient。
以下过程是完整的演示,可在演示应用程序https://github.com/concurlabs/concur-api-objc-demo中找到。
在AppDelegate的application:didFinishLaunchingWithOptions
方法中,使用您的客户端ID和包含您请求访问的权限的作用域数组的CXConcurClient进行配置。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[CXConcurClient.sharedInstance setupWithClientId:@"0123456789ABCDEF0123" scope:@[@"EXPRPT"]];
}
如果AppDelegate中尚未添加application:openURL:options
,请将其添加,并允许CXConcurClient尝试处理传递到您的应用程序的URL。如果该URL与Concur OAuth登录过程相关,则此方法将返回true,否则将返回NO。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
BOOL handled = false;
handled = [CXConcurClient.sharedInstance handleOpenUrl:url];
return handled;
}
CXConcurClient和客户端代码之间的通信通过代理进行。一旦您将调用代码设置为代理,您将收到通知,了解您执行认证过程(如登录和注销)时的重要事件。请考虑您将想要从UIViewController开始OAuth认证。
- (void)viewDidLoad {
[super viewDidLoad];
CXConcurClient.sharedInstance.client = [CXConcurClient sharedInstance];
...
}
然后,比如说响应登录按钮被按下的事件时,你会启动OAuth过程。
- (IBAction)didTapSignIn:(id)sender {
[CXConcurClient.sharedinstance login];
}
这将在用户的屏幕上显示Concur OAuth身份验证页面,提示输入用户名和密码,然后请求代表你的应用程序访问资源的权限,具体取决于你指定的范围。完成这一步骤后,CXConcurClient将调用适当的委托方法,这些方法将如下之一
#pragma mark - ConcurClient Delegate Methods
- (void)onLoginSuccess {
}
- (void)onLoginFailure:(NSError*)error {
}
- (void)onLogoutSuccess {
}
- (void)onLogoutFailure:(NSError*)error {
}