用户身份验证是几乎所有企业移动应用程序中的基本要求。对于内部移动应用程序,例如与薪水,休假和商务旅行预订有关的应用程序,组织希望通过对用户对其本地LDAP服务器进行身份验证来利用单个签名。对于针对最终用户的应用程序,企业数据未公开,例如,适用于产品用户的应用程序,允许他们提高服务请求,从而允许用户使用其社交登录名来验证,例如Facebook登录/Google登录将变得容易得多。此代码模式显示了开发人员如何利用IBM移动基础服务来实施以下用户身份验证机制:
完成此代码模式后,您将了解:

上图说明了登录流量(此处使用Google描述,但也与Facebook或其他社会提供商有关)。该图显示,触发社会提供者是由客户启动的。

1。设置离子和移动配置CLI
2。创建Cloudant数据库并用示例数据填充它
3。创建IBM云对象存储服务并用示例数据填充它
4。创建移动基础服务和配置MFP CLI
5。设置LDAP服务器和安全网关客户端
6.在Google和Facebook上注册Android应用以进行社交登录
7。下载源存储库和自定义
7.1克隆回购
7.2更新应用程序ID,名称和说明
7.3在移动配置适配器中指定Cloudant凭据
7.4在移动文件适配器中指定云对象存储凭据
7.5在移动文件适配器中指定LDAP凭据
7.6在MoileFoundation适配器中指定Google登录凭据
7.7在Ionic应用中指定Facebook Appid和Google ClientId
8。部署移动配置适配器和测试
8.1构建和部署移动文件适配器
8.2启动移动配置仪表板并验证适配器配置
9。在Android手机上运行申请
该项目建立在https://github.com/ibm/ionic-mfp-app上。从该基础项目中运行以下步骤,以便从IBM Cloud提供所需的移动后端服务,并用示例数据填充它们,并在开发机上设置离子和移动配置CLI。
步骤1。设置离子和移动配置CLI
步骤2。创建Cloudant数据库并用示例数据填充它
步骤3。创建IBM云对象存储服务并用示例数据填充它
步骤4。创建移动基础服务并配置移动配置CLI
如果您拥有企业LDAP服务器设置并运行,则可以跳过本节的其余部分,然后移至“设置安全网关客户端”部分。如果您没有任何LDAP服务器设置,则可以尝试安装Apacheds -https://directory.apache.org/apacheds。 Apacheds的基本安装和设置指南可在-https://directory.apache.org/apacheds/basic-user-guide.html(请参阅第1节)。通过以下步骤在此处导入示例数据。添加一个新的条目,其中包括您的详细信息,例如
为了能够从IBM Cloud上运行的移动基础服务器中访问本地LDAP服务器,我们必须首先根据以下步骤在本地LDAP服务器和IBM Cloud之间创建安全的网关连接:
登录到IBM云。点击
Catalog > All Categories > Integration > Secure Gateway > Create
在安全网关服务仪表板内,单击Add Gateway 。指定名称,然后单击Add Gateway 。单击刚刚添加的网关图标。
单击Add Clients 。留下IBM Installer AS-IS的默认选择。记下Gateway ID和Security Token 。
复制为安全网关客户端安装程序的下载URL,以适用于LDAP服务器正在运行的操作系统。
登录到LDAP服务器正在运行的本地计算机。使用从安全网关仪表板获得的下载URL下载安全网关客户端安装程序。通过使用可用的说明来安装并启动安全网关客户端。
使用此处可用的说明添加LDAP服务器作为安全网关客户端中的目标。如果新添加的目的地显示了一只红色的凸起的手,其中包含Access blocked by ACL ,请确保在安全网关客户端命令行中运行acl allow < host >:< port > 。
hostname:port 。 

$ git clone https://github.com/IBM/MFP-Auth-LDAP
$ cd MFP-Auth-LDAP
如下更新IonicMobileApp/config.xml 。适当地更改id , name , description和author详细信息。
<?xml version='1.0' encoding='utf-8'?>
<widget id="org.mycity.myward" version="2.0.0" xmlns="https://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:mfp="http://www.ibm.com/mobilefirst/cordova-plugin-mfp">
<name>MyWard</name>
<description>Get your civic issues resolved by posting through this app.</description>
<author email="[email protected]" href="https://developer.ibm.com/code/author/shivahr/">Shiva Kumar H R</author>
...
打开MobileFoundationAdapters/MyWardData/src/main/adapter-resources/adapter.xml并更新以下属性,以指向步骤2中创建的Cloudant数据库。
key和password 。account ,请指定Cloudant仪表板URL部分,直至(和包括) -bluemix.cloudant.com,如步骤2.2的快照所示。DBName ,请留下myward as-is的默认值。
<mfp:adapter name="MyWardData" ...>
<property name="account" displayName="Cloudant account" defaultValue=""/>
<property name="key" displayName="Cloudant key" defaultValue=""/>
<property name="password" displayName="Cloudant password" defaultValue=""/>
<property name="DBName" displayName="Cloudant DB name" defaultValue="myward"/>
...
</mfp:adapter>
Open MobileFoundationAdapters/MyWardData/src/main/adapter-resources/adapter.xml并更新以下属性,以指向步骤3中创建的云对象存储。
bucketName的值。serviceId和apiKey 。endpointURL 。
<mfp:adapter name="MyWardData" ...>
...
<property name="endpointURL" displayName="Cloud Object Storage Endpoint Public URL" defaultValue="https://s3-api.us-geo.objectstorage.softlayer.net"/>
<property name="bucketName" displayName="Cloud Object Storage Bucket Name" defaultValue=""/>
<property name="serviceId" displayName="Cloud Object Storage Service ID" defaultValue="" />
<property name="apiKey" displayName="Cloud Object Storage API Key" defaultValue=""/>
</mfp:adapter>
Open MobileFoundationAdapters/LDAPLoginAdapter/src/main/adapter-resources/adapter.xml并更新以下属性,以指向步骤5.2中创建的安全网关客户端
<property name="ldapUserAttribute" defaultValue="uid" displayName="The LDAP attribute for username"/>
<property name="ldapNameAttribute" defaultValue="cn" displayName="The LDAP attribute for display name"/>
<property name="ldapURL" defaultValue="ldap://caplonsgprd-5.integration.ibmcloud.com:15315" displayName="The LDAP Server URL"/>
<property name="userFilter" defaultValue="(&(uid=%v))" displayName="The LDAP user filter, use %v as placeholder for user"/>
<property name="bindDN" defaultValue="uid=admin,ou=system" displayName="The LDAP bind DN (- for none)"/>
<property name="bindPassword" defaultValue="apacheds" displayName="The LDAP bind password (- for none)" type="string"/>
打开MobileFoundationAdapters/SocialLoginAdapter/src/main/adapter-resources/adapter.xml并更新步骤6中创建的Google客户端ID,如下所示
<property name="google.clientId"
defaultValue="618106571370-nie902ccc0i3id6sgdu4nc58bslabcde.apps.googleusercontent.com"
displayName="google client Id"
description="OAuth 2.0 client ID that was created for your server. Get it from Google Developers Console
at https://console.developers.google.com/projectselector/apis/credentials"/>
使用以下命令安装Cordova和Ionic Facebook插件和Google Plus插件(Python2是先决条件)
$ ionic cordova plugin add cordova-plugin-facebook4 --variable APP_ID="your_appid_from_step6" --variable APP_NAME="your application name"
$ npm install --save @ionic-native/facebook
$ ionic cordova plugin add cordova-plugin-googleplus --variable REVERSED_CLIENT_ID="reverseclientid_from_step6"
$ npm install --save @ionic-native/google-plus
在安装Facebook和Google Plus插件后,请检查config.xml文件中是否存在在步骤6中获得的Facebook应用程序ID和Google WebClientID,如下所示
<plugin name="cordova-plugin-facebook4" spec="^1.9.1">
<variable name="APP_ID" value="your_appid" />
<variable name="APP_NAME" value="MyWard" />
</plugin>
<plugin name="cordova-plugin-googleplus" spec="^5.3.0">
<variable name="REVERSED_CLIENT_ID" value="your_reverse_clientid" />
</plugin>
REVERSED_CLIENT_ID是STEP6中获得的Google WebClientID的反向形式。
还将在Google Pluslogin()方法中的Auth_handler.ts文件中添加WebClientID。
如下,构建和部署MyWardData适配器。
$ cd MobileFoundationAdapters/
$ cd MyWardData
$ mfpdev adapter build
$ mfpdev adapter deploy
注意 - 如果服务器不是默认的服务器,请在命令中提及服务器名称“ MFPDEV适配器部署命令”。
如下所示,构建和部署LDAPLoginAdapter适配器。
$ cd ../LDAPLoginAdapter/
$ mfpdev adapter build
$ mfpdev adapter deploy
如下所示,构建和部署SocialLoginAdapter适配器。
$ cd ../SocialLoginAdapter/
$ mfpdev adapter build
$ mfpdev adapter deploy
如下启动移动配置仪表板:
Cloud Foundry Services下,单击您在步骤4中创建的Mobile Foundation服务。显示的服务概述页面将嵌入其中的Mobile Foundation仪表板。您还可以通过将/mfpconsole附加到步骤4中提到的URL中,在单独的浏览器选项卡中打开移动文件仪表板。LDAPLoginAdapter , SocialLoginAdapter和MyWardData适配器。验证移动文件适配器配置如下:
MyWardData适配器。在Configurations卡下,您应该看到我们在步骤7.3中指定的各种属性和步骤7.4,用于访问Cloudant数据库和云对象存储,如下所示。作为在MobileFoundationAdapters/MyWardData/src/main/adapter-resources/adapter.xml中指定这些属性值的替代方案,如步骤7.3和步骤7.4所示,您可以用空defaultValue部署适配器,一旦将适配器的值部署到本页面上,则可以在此页面上更改贴度。 
Resources选项卡。您应该看到MyWardData适配器暴露的各种REST API,如下所示。 Security列应显示针对每种REST方法的保护范围UserLogin 。 


按照基本项目的步骤7中的说明在Android手机上运行该应用程序。代替普通的UserLogin,请测试Google登录按钮或FB登录按钮或LDAPLOGIN按钮。基于选择的按钮,用户身份验证验证机制将有所不同。

下面的屏幕快照显示了应用程序的不同页面。



请参阅使用Chrome Developer工具或故障排除指南来调试Android Hybrid应用的说明,以解决某些常见问题的解决方案。
Apache 2.0