接口详解
了解Oauth2.0协议登录流程(与OrgID的交互流程)
- 登录获取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
- 通过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 }
- 通过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所示。
- /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应用自身会话,完成自身退出登录。