
# 接口详解
#### 了解OAuth2.0协议登录流程（与OrgID的交互流程）
图1Demo登录流程图   
![](https://support.huaweicloud.com/devg-appstage/zh-cn_image_0000001806950580.png)
1. 登录获取code：应用A首先需要在OrgID平台上进行注册，并进行相应的配置，比如，首页登录url，退出地址url等，然后用户通过浏览器在OrgID界面单击应用或者直接访问应用服务地址，浏览器向应用A发起登录请求，应用A接收后，会向OrgID发起认证，认证的请求信息为：
   ```
   method: get,
   url:    https://orgin-dev.huawei.com/oauth2/authorize,
   param:  response_type: code,        
           client_id: 应用A的clientID（需要在OrgID页面上获取）        
           scope: phone+profile+email（授予应用A的用户信息范围）        
           redirect_uri: https://myApp.com/login (在OrgID上配置的应用A的首页登录url)
   ```
   如果OrgID监测到用户未登录，则会跳转到OrgID的登录页，进行登录。登录成功后，OrgID会返回一个带有code参数的重定向请求（重定向的地址为应用A在OrgID上配置的首页登录url）。重定向的url示例为：
   ```
   url: https://myApp.com/login?code=lwooqdwgqfCqQkZ-kiZF7zwuiYyYg8MH4gZ0EE1NFk-L4rnl9v9Nqjw1cW1awpbw5RFhCLYdi-zPa2e-Qru8qBma6KIN7f-HBrwRLdAm4kNx24B0D0gUXOEs2eezH5UE
   ```
   
2. 通过code获取token：通过在第一步中的重定向url路径中获取code。应用A拿着code，向OrgID发送一个post请求来获取token，请求信息如下：
   ```
   method:   post,
   url:      https://orgid-dev.huawei.com/oauth2/token
   formdata: grant_type: authorization_code,          
             code: 第一步中获取到的code,         
             redirect_url: https://myApp.com/login,          
             client_id: 应用A的clientID         
             client_secret: 应用A的client_secret
   ```
   获取的响应为：
   ```
   {     
       "access_token": "J2Bp_wnA_EJDxCqEdaw2VrE_xol60YeGG1_zKbKzGLBX0l407dkjfe9O-iOxl7dn87nGekGcxZCwlSzyGH9yp71QRtO36R18qki6foIQYyIN58o1mi8c4-0dFGCwmHII",
       "refresh_token": "pTEUCnloqhCRuJpkueXAeqTNXo2gPRja90Ba9nAe6l1si-d9hK-njhB3W_3rbDIvH4rIs_59FrJ1Bb6iVkDkKj81NOV7uiNtRbSois8Eweh2QTfBR9Dx9aZ6PcJdJg0-",
       "scope": "phone profile email",     
       "token_type": "Bearer",     
       "expires_in": 7200
   }
   ```
   
3. 通过token获取登录的用户信息：获取token后，应用A将其作为认证凭证，向OrgID发送get请求以获取用户信息，请求信息如下：
   ```
   method:     get
   url:        https://orgid-dev.huawei.com/oauth2/userinfo
   headers:         
               Authorization: Bearer access_token (其中access_token是第二步请求中的响应体)
   ```
   获取的响应为：
   ```
   {     
       "tenant_name": "zzxTest",     
       "role": "admin",     
       "user_id": "1008600000020011612",     
       "user_name": "hid_prsll6r9d8w784c",     
       "name": "150******53",     
       "mobile": "150******53",     
       "tenant": "919008600000119****",     
       "employee_code": "00001"
   }
   ```
   
#### Demo工程中的接口介绍
Demo工程中的接口如[图2]所示。
图2Demo工程中的接口   
![](https://support.huaweicloud.com/devg-appstage/zh-cn_image_0000001806790756.png)
- /login接口 本Demo应用引入了thymeleaf，在配置文件中配置thymeleaf基本参数后，该接口返回为登录页的静态资源login.html，即登录页的界面。
  图3配置thymeleaf   
  ![](https://support.huaweicloud.com/devg-appstage/zh-cn_image_0000001853709465.png) 
- /is/login接口 该接口为查询当前访问的用户是否登录，如果登录，则返回当前登录的用户信息，否则返回消息为空。与OrgID的登录流程在本Demo中进行，当其他微服务需要判断当前用户登录状态时，内部调用此接口来获取当前登录的用户信息。
  
- /index接口 DemoOrgidLogin登录成功后的访问地址首页，同/login接口，返回为登录页的静态资源，即index.html。
  
- /oauth2/toLogin接口 该接口的接口地址为OrgID侧配置的回调地址，即上述OAuth2.0登录流程中的：回调应用，提供授权码code。
  当用户输入账号密码登录后，OrgID会携带授权码code回调此接口，该接口需要依次完成OAuth2.0登录流程中的1\~3步，最终拿到用户信息后，根据用户信息生成cookie，建立demo应用与用户浏览器的会话。
  
- /app/logout接口 该接口为demo应用的退出接口，当用户需要退出应用时，需完成以下两件事：
  - 需要清除自身会话，完成自身应用退出逻辑。
  
  - 重定向到OrgID的退出页完成OrgID侧的退出逻辑。
   
- /callback/logout接口 该接口为OrgID的回调接口，当用户从OrgID侧发起退出登录时，会通知到应用侧。此时会回调该接口，不同于/app/logout退出接口，该接口只需清理demo应用自身会话，完成自身退出登录。
  
 
