要在 Liferay 门户中启用 OAuth 身份验证,必须安装 OAuth 提供者插件。此插件目前仅适用于 EE 客户。
阅读其文档 以生成您应用程序的消费者密钥和密钥,它们将由移动 SDK 用于签名请求,我们将在本文件中引用它们。
此库是 Mobile SDK 的 CocoaPods subspec。您安装 Mobile SDK 作为依赖项后,此库将可用。请参阅移动 SDK 文档了解如何将其作为依赖项包含到项目中。
创建一个传递 LROAuth
实例的 LRSession
实例
LROAuth *auth = [[LROAuth alloc] initWithConsumerKey:consumerKey
consumerSecret:consumerSecret token:token tokenSecret:tokenSecret];
LRSession *session = [[LRSession alloc]
initWithServer:@"https://:8080" authentication:auth];
LRGroupService_v62 *service = [[LRGroupService_v62 alloc]
initWithSession:session];
NSArray *sites = [service getUserSites:&error];
如您所见,您需要将 consumerKey
和 consumerSecret
传递给 LROAuth
构造函数。这些参数与您的应用程序相关联,如前所述,必须由OAuth 提供者插件生成。
token
和 tokenSecret
是 OAuth 1.0a 协议所需的令牌。它们用于在用户授予您的应用程序权限后识别用户。为了获取它们,用户需要通过 OAuth 流程进行身份验证,也就是说,您的应用程序必须打开一个显示门户登录页面 Web 浏览器,并且用户需要登录并授予您的应用程序权限。
您可以自己实现这部分,使用任何可用的 iOS OAuth 1.0a 库。或者,我们提供了用于获取 token
和 tokenSecret
的辅助类。请参阅下面的部分。
以下步骤说明为使用外部浏览器进行验证所需的步骤。非常重要,您需要阅读并运行示例应用程序。
这将在用户的移动浏览器中打开,与在应用程序内部发生身份验证流相反。
从您的 ViewController
开始,您必须通过传递 OAuthConfig
实例作为意图获取 OAuthActivity
。
OAuthConfig config = new OAuthConfig(server, consumerKey, consumerSecret);
Intent intent = new Intent(this, OAuthActivity.class);
intent.putExtra(OAuthActivity.EXTRA_OAUTH_CONFIG, config);
startActivityForResult(intent, 1);
如果一切顺利,外部网页浏览器将会打开Liferay的登录页面,并请求用户的凭据。
一旦用户成功验证并赋予了您的应用程序权限,您的Activity
中的onActivityResult
方法将被调用。同样,如果用户没有授予权限或出了一些问题,onActivityResult
也会被调用
@Override
public void onActivityResult(int request, int result, Intent intent) {
if (result == RESULT_OK) {
OAuthConfig config = (OAuthConfig)intent.getSerializableExtra(
OAuthActivity.EXTRA_OAUTH_CONFIG);
String consumerKey = config.getConsumerKey();
String consumerSecret = config.getConsumerSecret();
String token = config.getToken();
String tokenSecret = config.getTokenSecret();
// Create an OAuth instance with these values and pass to
// the SessionImpl constructor
}
else if (result == RESULT_CANCELED) {
Exception exception = (Exception)intent.getSerializableExtra(
OAuthActivity.EXTRA_EXCEPTION);
exception.printStackTrace();
}
}
检查result
参数以查看是否验证成功。如果成功,从intent中获取OAuthConfig
附加信息,它提供了SessionImpl
验证Liferay远程服务所需的全部4个值。阅读上面的使用部分,了解如何使用这些值与Mobile SDK的服务一起使用。
如果失败,intent将包含具有错误原因的Exception
附加信息。