更新时间:2024-03-07 GMT+08:00
分享

接口详解

了解Oauth2.0协议登录流程(与OrgID的交互流程)

图1 Demo登录流程图
  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拿着token,向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所示。

图2 Demo工程中的接口
  • /login接口

    本Demo应用引入了thymeleaf,在配置文件中配置thymeleaf基本参数后,该接口返回为登录页的静态资源login.html,即登录页的界面。

    图3 配置thymeleaf
  • /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应用自身会话,完成自身退出登录。

相关文档