
# 同步OneAccess组织用户
应用身份管理服务OneAccess是华为云提供的应用身份管理服务，具备集中式的身份管理、认证和授权能力，保证企业用户根据权限访问受信任的云端和本地应用系统，并对异常访问行为进行有效防范。在AstroZero中集成OneAccess，可直接使用OneAccess来管理AstroZero应用中的业务用户。
#### 前提条件
在AstroZero中集成OneAccess前，请先完成如下配置。
1. 购买OneAccess实例。 
   在使用应用身份管理服务前，需要先购买OneAccess实例，详情请参见[管理员购买实例](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0003.html)。
   
   
2. 在OneAccess中添加组织（对应AstroZero的角色）和用户（对应AstroZero的业务用户）。
   
   组织用于对企业人员进行管理，一个公司或部门可对应一个组织，将用户添加到组织中可实现对用户的批量管理和授权。顶层组织作为根节点，可以在其下添加多个子组织与用户，同时，在子组织下可继续添加多层组织与用户。如何添加组织及用户，请参见[管理员添加组织](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0023.html#section0)和[管理员添加用户](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0022.html#section0)。
   
   
3. 在OneAccess实例管理门户中添加应用，通过[配置OneAccess集成认证信息]，可建立OneAccess对AstroZero应用的信任关系。
   
   添加应用并授权的详情操作，请参见[添加应用](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0031.html)和[授权管理](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0080.html)。其中，授权的账号为[2]中添加的用户。
   
   
4. 在OneAccess中配置应用的信息，确保用户可以通过OneAccess登录应用。
   
   1. 参考[认证集成](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0075.html)中操作，完成认证配置。
      当前AstroZero和OneAccess对接，支持"Oauth2"、"SAML2"和"CAS"三种认证集成方式。
      - OAuth2：OAuth（开放授权）是一个开放标准，允许用户授权第三方应用访问存储在资源服务器上的信息，而不需要将用户名和密码提供给第三方应用。
      
      - SAML2：安全断言标记语言（Security Assertion Markup Language 2.0，简称SAML 2.0）是一个由一组协议组成，用来传输安全声明的XML框架。SAML2.0是由标准化组织OASIS提出的用于安全操作的标准，是很多身份提供商 （IdP）使用的一种开放标准。关于SAML2.0的详细描述，请参见[SAML 2.0技术概述](https://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html)。
      
      - CAS：CAS是一个基于HTTP2、HTTP3的协议，要求每个组件都可以通过特定的URL访问。通过CAS协议将华为OneAccess作为服务提供商，使第三方应用的用户账号数据可以访问OneAccess。
       
      例如，设置为"OAuth2"协议时，配置示例如[图1]所示。
      图1设置认证协议   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002121275208.png "点击放大") 
   
   2. 获取鉴权信息。
      在"通用信息 \> 接口认证凭证"下，单击"启用"，记录"ClientId"和"ClientSecret"的值，在[1]中会使用到。
      图2获取鉴权信息   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002121117104.png "点击放大")
      ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
      - ClientSecret是校验开发者身份的密码，具备高安全性，切勿将其直接提供给第三方开发者或直接存储在代码中。
      
      - OneAccess不存储ClientSecret，获取ClientSecret后，请妥善保管。
      
      - 启用后单击"重置"，可重置ClientSecret。重置后的ClientSecret即时生效，所有使用原ClientSecret的接口将全部失效，请谨慎重置。
        
   
   3. 参考[授权内置API产品](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0312.html)中操作，授予应用API权限。
   
   4. 参考"[授权管理](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0117.html#section3) \> 应用账号 \> 授权策略"中操作，授权用户设置。
   
   5. 参考"[对象模型](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0079.html#section1) \> 应用机构模型"中操作，开启应用机构，同步机构数据至企业应用。
      图3开启应用机构   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002156556905.png "点击放大") 
   
   
   
   
 
 #### 配置OneAccess集成认证信息
1. 在AstroZero配置OneAccess集成认证信息。
   
   1. 参考[登录管理中心](https://support.huaweicloud.com/usermanual-astrozero/astrozero_06_2092.html)中操作，登录AstroZero管理中心。
   
   2. 在左侧导航栏中，选择"系统管理 \> 统一身份认证"。
   
   3. 在预置认证中，单击"OneAccess"图标。
   
   4. 配置标签、名称和图标，单击"下一步"。
      表1基本配置参数说明 
      | 参数   | 说明                                                                                                                                                                                                                                                                                                                                                                                |
      |:---|:---|
      | 标签   | 新建OneAccess集成认证的标签，用于展示使用。                                                                                                                                                                                                                                                                                                                                                        |
      | 名称   | 新建OneAccess集成认证的名称，命名需保证全局唯一。地址会根据此名称判断是哪个具体账号的认证。命名要求如下： - 长度不能超过64个字符。  - 必须以英文字母开头，只能由英文字母、数字或单下划线组成，且不能以下划线结尾。   |
      | Logo | 新建OneAccess集成认证的图标。                                                                                                                                                                                                                                                                                                                                                               |
         
      
   
   5. 在"认证协议"中，根据[4]中OneAccess应用设置的认证方式，选择Oauth2、SAML2或CAS，并设置认证源信息，单击"下一步"。
      表2"Oauth2"协议认证配置字段说明 
      | 参数               | 说明                                                                                                                                                                                                                                                                                                                                  |
      |:---|:---|
      | 认证协议             | AstroZero和OneAccess之间的认证协议。                                                                                                                                                                                                                                                                                                         |
      | OneAccess实例的域名   | 在OneAccess实例控制台，单击"用户访问域名"后的复制，可获取用户访问域名，详情请参见[获取用户访问域名](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0020.html)。                                                                                                                                                                                              |
      | 认证地址             | 设置认证登录地址，Oauth方式认证地址为"https://*{host}*/api/v1/oauth2/authorize"，其中"{host}"为OneAccess实例的域名。                                                                                                                                                                                                                                          |
      | 获取access_token地址 | 获取access_token的请求地址，配置为"https://*{host}*/api/v1/oauth2/token"，其中"{host}"为OneAccess实例的域名，"access_token"为访问API接口的令牌。                                                                                                                                                                                                                  |
      | 获取用户信息地址         | 获取用户信息的请求地址，配置为"https://*{host}*/api/v1/oauth2/userinfo"，其中"{host}"为OneAccess实例的域名。                                                                                                                                                                                                                                                 |
      | 登出地址             | AstroZero登出之后，跳到服务端的登出地址，使服务端登出，建议配置登出地址。支持在登出地址中添加变量"{redirect}"，登出时替换为当前配置的页面地址。 示例：https://*{host}*/api/v1/logout?redirect_url={redirect}                                                                                                                        |
      | 是否登录时自动创建用户      | 用户首次登录时，如果系统中不存在此用户，是否自动创建用户。                                                                                                                                                                                                                                                                                                       |
      | 用户权限             | 当使用OneAccess用户登录时，如果用户不存在，且开启了自动创建用户，此权限将作为创建用户的默认权限。                                                                                                                                                                                                                                                                               |
      | 是否校验state        | 是否需要检验state参数。 AstroZero在响应请求后，将重定向到OneAccess，此时OneAccess根据该配置决定是否校验state参数一致性（即cookie或session里的state）。开启校验后，state不一致，则AstroZero拒绝此请求，且不再发起换取access_token的请求。如果一致，则流程正常运行。 建议开启校验state，以防止CSRF攻击。 |
         
      表3"CAS"协议认证配置字段说明 
      | 参数             | 说明                                                                                                                                                                                                           |
      |:---|:---|
      | 认证协议           | AstroZero和OneAccess之间的认证协议。                                                                                                                                                                                  |
      | OneAccess实例的域名 | 在OneAccess实例控制台，单击"用户访问域名"后的复制，可获取用户访问域名，详情请参见[获取用户访问域名](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0020.html)。                                                                       |
      | 认证地址           | 设置认证登录地址。CAS方式认证地址为"https://*{host}*/api/v1/cas/login"，其中"{host}"为OneAccess实例的域名。                                                                                                                            |
      | 验证票据地址         | 验证票据并获取用户属性信息的地址，当前仅支持CAS2.0和CAS3.0。 CAS验证票据地址配置为"https://*{host}*/api/v1/cas/p3/serviceValidate"，其中"{host}"为OneAccess实例的域名。                  |
      | 登出地址           | AstroZero登出之后，跳到服务端的登出地址，使服务端登出，建议配置登出地址。支持在登出地址中添加变量"{redirect}"，登出时替换为当前配置的页面地址。 示例：https://*{host}*/api/v1/logout?redirect_url={redirect} |
      | 是否登录时自动创建用户    | 用户首次登录时，如果系统中不存在此用户，是否自动创建用户。                                                                                                                                                                                |
      | 用户权限           | 当使用OneAccess用户登录时，如果用户不存在，且开启了自动创建用户，此权限将作为创建用户的模式权限。                                                                                                                                                        |
         
      表4"SAML2"协议认证配置字段说明 
      | 参数             | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      |:---|:---|
      | 认证协议           | AstroZero和OneAccess之间的认证协议。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
      | OneAccess实例的域名 | 在OneAccess实例控制台，单击"用户访问域名"后的复制，可获取用户访问域名，详情请参见[获取用户访问域名](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0020.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
      | 登出地址           | AstroZero登出之后，跳到服务端的登出地址，使服务端登出，建议配置登出地址。支持在登出地址中添加变量"{redirect}"，登出时替换为当前配置的页面地址。 示例：https://*{host}*/api/v1/logout?redirect_url={redirect}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      | 是否登录时自动创建用户    | 用户首次登录时，如果系统中不存在此用户，是否自动创建用户。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
      | 用户权限           | 当使用OneAccess用户登录时，如果用户不存在，且开启了自动创建用户，此权限将作为创建用户的模式权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
      | 是否校验state      | 是否需要检验state参数。 AstroZero在响应请求后，将重定向到OneAccess，此时OneAccess根据该配置决定是否校验state参数一致性（即cookie或session里的state）。开启校验后，state不一致，则AstroZero拒绝此请求，且不再发起换取access_token的请求。如果一致，则流程正常运行。 建议开启校验state，以防止CSRF攻击。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      | 客户端证书          | SAML客户端签名证书公钥。 自签名证书公钥如"saml.crt"，获取方法如下，该方法创建的证书通常只适用于测试场景。 1. 在linux机器上执行如下命令生成密钥文件"saml.key"。 ``` openssl genrsa -out saml.key 2048 ``` 命令执行后将在当前目录生成一个"saml.key"的私钥文件。 生成的密钥格式必须为： ``` -----BEGIN PRIVATE KEY----- …………………………………………….. -----END PRIVATE KEY----- ```   2. 用上一步的密钥文件去签发生成文件"saml.csr"。 ``` openssl req -new -key saml.key -out saml.csr ```   3. 根据提示依次输入国家、地区、组织、邮箱及common name（用户名或域名，如果为了https申请，该参数值必须和域名相同，否则会引发浏览器警报），按回车键确认。  4. 执行如下命令，用之前生成的文件，去签发生成自己的证书文件"saml.crt"。 ``` openssl x509 -req -days 365 -in saml.csr -signkey saml.key -out saml.crt ``` 生成的证书格式必须为： ``` -----BEGIN CERTIFICATE----- …………………………………………………………… -----END CERTIFICATE----- ```     |
      | 客户端证书私钥        | SAML签名证书私钥。 自签名证书私钥为生成客户端证书中产生的"saml.key"文件，该方法创建的证书通常只适用于测试场景。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      | Idp Metadata文件 | SAML服务端的元数据文件，需要到SAML身份提供商（Identity Provider，简称IdP）获取，获取方法请参考[获取IdP元数据metadata](https://support.huaweicloud.com/api-oneaccess/ShowIdpMetadata.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
         
      
   
   6. 在"身份源配置"中，配置对端鉴权ID和对端鉴权密钥，单击"保存"。 对端鉴权ID和对端鉴权密钥为[4.b]中，获取的OneAccess应用的ClientId和ClientSecret。
      
   
   7. 单击"去同步"，同步组织机构和用户信息，支持立即同步和设置定时同步任务。
      图4同步身份认证   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002156475293.png "点击放大")
      - 立即同步
        1. 单击"同步部门"下的"立即同步"，在弹框中，若勾选"同时清除未包含在同步中的部门"表示在AstroZero中清除OneAccess已删除的部门，单击"确定"。
        
        2. 单击"同步用户"下的"立即同步"，在弹框中，勾选"同时清除未包含在同步中的用户"表示在AstroZero中清除OneAccess已删除的用户，单击"确定"。
         
      
      - 设置定时任务实现自动同步
        1. 在"同步部门"中，打开"开启自动同步"开关，单击"同步部门"下的"自动同步设置"，设置首次同步时间、执行周期，勾选"同时清除未包含在同步中的部门"表示在AstroZero中清除OneAccess已删除的部门，单击"确定"。
        
        2. 在"同步用户"中，打开"开启自动同步"开关，单击"同步用户"下的"自动同步设置"，设置首次同步时间、执行周期，勾选"同时清除未包含在同步中的用户"表示在AstroZero中清除OneAccess已删除的用户，单击"确定"。
         
      
      
      系统会同步OneAccess机构组织信息到AstroZero业务配置中心的"组织用户 \> 组织机构"中，并同步OneAccess用户信息到AstroZero业务配置中心的"组织用户 \> 用户管理"中。
      ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
      这里同步的组织级用户信息是OneAccess全局组织用户，和与AstroZero关联的OneAccess应用中的添加的机构及账号非一对一关系。全局用户只有添加了OneAccess的应用授权后，才能够通过认证并登录。所以同步过来的用户不是全部都能登录，只有在OneAccess的应用中授权了它才能成为一个能认证登录的账号。
      
   
   8. （可选）在"认证配置"菜单下，单击"下载"，下载SP Metadata文件，后续需要配置该文件到身份提供商中。
      **当[1.e]认证协议选择"SAML2"时，您需要执行该步骤。**
      图5下载SP Metadata文件   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002121275212.png "点击放大") 
   
   
   
   
2. 在OneAccess中，配置认证信息。 
   1. 进入OneAccess实例管理门户，在导航栏中，选择"资源 \> 应用"。
   
   2. 单击之前添加的应用，在应用信息页面单击应用图标。
   
   3. 单击左侧列表中的"认证集成"，配置认证参数。
      - 若[1.e]认证协议配置的为"Oauth2"或"CAS"，请参考[图6]和[表5]设置。
        图6配置认证参数   
        ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002121117108.png "点击放大")
         表5参数说明 
        | 参数               | 说明                                                                                                                                                                                                                                                                                                                                                                                  |
        |:---|:---|
        | 标准授权模式           | 标准授权模式是最常用，安全性也最高的一种认证模式，适用于有后端的Web应用。该模式下，授权码通过前端传送，令牌存储在后端，可以避免令牌泄漏，而且所有与资源服务器的通信都在后端完成。                                                                                                                                                                                                                                                                                          |
        | 简化授权模式           | 适用于没有后端的Web应用，必须将令牌存储在前端，用于一些对安全要求不高的场景。与标准授权模式相比，省略了获取授权码code环节。                                                                                                                                                                                                                                                                                                                   |
        | 资源所有者密码模式        | 适用于用户对客户端高度信任的场景，用户将用户名和密码提供给客户端，由客户端申请令牌。                                                                                                                                                                                                                                                                                                                                          |
        | 客户端密码模式          | 适用于没有前端的应用，由客户端发起申请令牌请求。                                                                                                                                                                                                                                                                                                                                                            |
        | 回调地址             | 成功授权后的回调地址，设置为"https://*{astrozerohost}* /baas/auth/v1.0/idp/authorize/*{认证设置名称}*"。 其中，*"astrozerohost"* 为AstroZero的环境域名，认证设置名称为[1.d]中设置的名称，需带命名空间。 必填，认证时，OneAccess会校验AstroZero地址。 |
        | 退出跳转URL          | 应用退出地址，用户在OneAccess注销会话后返回绑定的地址。                                                                                                                                                                                                                                                                                                                                                    |
        | Access Token有效期  | 授权令牌的有效期，默认2小时，单位为秒。                                                                                                                                                                                                                                                                                                                                                                |
        | Refresh Token有效期 | 刷新令牌的有效期，默认为0，即不支持Refresh Token。当Access Token过期后，用户可通过Refresh Token实现自动更新令牌。 **实现自动更新令牌的前提是，设置** **Refresh Token有效期大于Access Token** **的有效期。**                                                                                                                                                                        |
           
        
      
      - 若[1.e]认证协议配置的为"SAML"，请单击"上传文件"，上传[1.h]中下载的SP Metadata文件。
       
   
   
   
   
3. 登录测试，使用[4.d]中，已授权用户访问业务应用。
   
   例如，访问默认应用Portal页，地址为"https://*{* *astrozerohost* *}* /baas/auth/v1.0/idp?client-name=*{* *认证设置名称* }\&redirect=https://*{* *astrozerohost}*/app/portal.html"。
   其中，"*astrozerohost* "为AstroZero的环境域名，"认证设置名称"为[1.d]中设置的名称，带命名空间。redirect值可以改为登录后访问的页面地址，需要url编码。
   
   
 
