前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apriso 通过飞书OAuth2.0实现单点二维码扫描登录

Apriso 通过飞书OAuth2.0实现单点二维码扫描登录

作者头像
李英杰同学
发布2023-09-02 08:29:40
1.3K0
发布2023-09-02 08:29:40
举报
文章被收录于专栏:智能制造社区

本文介绍如何把 Apriso 与飞书集成,通过飞书授权直接登录 Apriso

本文作者陈捌华,感谢捌老师倾情奉献。

OAuth2.0介绍 OAuth(Open Authorization)是一个关于授权的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版。在Apriso MOM项目实施过程中也经常会碰到要求Apriso支持OAth2.0单点登录的需求。

本文以飞书平台为例,微信企业号和钉钉等平台实现方式大同小异,可以根据实际情况进行适当调整。

飞书单点登录整体流程

▶ 第一步:获取 code

详见:https://open.feishu.cn/document/common-capabilities/sso/web-application-sso/web-app-overview

应用请求用户身份验证时,需按如下方式构造授权登录页面链接,并引导用户跳转至此页面。用户在此页面确认授权之后会产生一个授权码(code),并通过 redirect_uri携带至开发者的服务器。

页面地址 :https://passport.feishu.cn/suite/passport/oauth/authorize

请求参数:

链接示例 :

https://passport.feishu.cn/suite/passport/oauth/authorize?client_id=CLIENT_ID&redirect_uri=http%3A%2F%2F127.0.0.1%3A8888&response_type=code&state=state123456

▶ 第二步:获取 access_token

详见:https://open.feishu.cn/document/common-capabilities/sso/api/get-access_token

开发者网页前端或客户端 获取 code 之后,需要把 code 传递给开发者的服务器,然后通过开发者服务器调用飞书服务器来获取可用于访问用户信息的 access_token。access_token 是开发者用户获取用户信息的唯一凭证,开发者服务器需要严格保证 access_token 的安全,并禁止把 access_token 传递给客户端。

请求方法 :POST

请求地址 :https://passport.feishu.cn/suite/passport/oauth/token

请求 Header:

字段

Content-Type

application/x-www-form-urlencoded

请求参数:

返回 Header :

字段

Content-Type

application/json;charset=UTF-8

返回参数:

返回示例:

代码语言:javascript
复制
{
    "access_token": "Q7JWnaIM_kRChuLfreHmpArjOEayt.5XUBJcZr.V0Gst4FdQCtvrd9sAViLXQnQgkpL19brGOjKZQTxb",
    "token_type": "Bearer",
    "expires_in": 3600,    
    "refresh_token": "oQ0mMq6MCcueAv0pwx2fQQhxqv__CbLu6G8ySFwafeKww2Def2BJdOkW3.9gCFM.LBQgFri901QaqeuL",
    "refresh_expires_in": 864000
}

▶ 第三步:获取用户信息

详见:https://open.feishu.cn/document/common-capabilities/sso/api/get-user-info

开发者获取 access_token 之后,可以通过 access_token 来调用飞书服务器来获取用户信息。

请求方法 :GET

请求地址 :https://passport.feishu.cn/suite/passport/oauth/userinfo

请求 Header:

字段

Authorization

Bearer ${access_token}

返回 Header :

字段

Content-Type

application/json;charset=UTF-8

返回参数:

返回示例:

代码语言:javascript
复制
{
    "sub": "ou_caecc734c2e3328a62489fe0648c4b98779515d3",
    "name": "李雷",
    "picture": "https://www.feishu.cn/avatar",
    "open_id": "ou_caecc734c2e3328a62489fe0648c4b98779515d3",
    "union_id": "on_d89jhsdhjsajkda7828enjdj328ydhhw3u43yjhdj",
    "en_name": "Lilei",
    "tenant_key": "736588c92lxf175d",
    "avatar_url": "www.feishu.cn/avatar/icon",
    "avatar_thumb": "www.feishu.cn/avatar/icon_thumb",
    "avatar_middle": "www.feishu.cn/avatar/icon_middle",
    "avatar_big": "www.feishu.cn/avatar/icon_big",
    "email": "zhangsan@feishu.cn",
    "user_id": "5d9bdxxx",
    "employee_no": "111222333",
    "mobile": "+86130xxxx0000"
}

▶ 第四步:根据获取用户信息匹配Apriso用户信息

一般情况下,可以根据用户工号、邮箱、手机号和Apriso用户信息中的ExternalLogin进行匹配(本示例中使用飞书账号的open_id进行匹配,项目中根据实际情况可以选用邮箱、手机号等进行关联匹配)。

▶ 第五步:根据用户信息登录Apriso系

需要通过客户化Apriso登录页面完成登录跳转,并且需要注意的是,只有Apriso Portal用这种方式可以很容易实现支持第三方SSO登陆。但是对于PB、DC、GPM等C/S架构程序并不能支持。

飞书配置

▶第一步,创建飞书自建应用

飞书企业管理员,进入飞书的开放平台, https://open.feishu.cn/app

点击【创建企业自建应用】按钮,创建应用。

记录App ID和App Secret

▶第二步 飞书自建应用开启网页应用功能

进入应用“添加应用能力”,添加“网页应用”能力:

▶第三步 设置重定向URL

在飞书的【安全设置】菜单,添加重定向URL地址 添加地址格式为:http://LP15-CSO5-CHN/Apriso/Portal/Kiosk/FeishuSSOLogin.aspx

▶第四步 飞书应用设置完毕,发布应用

飞书应用设置完毕后,需要发布应用,才会生效设置

登录页面开发

需要使用Visual studio单独开发一个新的登录页面,用于执行Oath2.0登录流程。

▶第一步,新建Visual studio项目AprisoOAuthLogin

▶第二步,添加引用

▶第三步,添加登录页面FeishuSSOLogin.aspx

▶第四步,根据飞书单点登录接口流程,在Page_Load中编写代码

1、 获取Code

2、 获取access_token

3、 获取用户信息

4、 匹配Apriso用户,登录系统

▶第五步,编译项目,生成AprisoOAuthLogin.dll备用

Apriso配置

▶第一步,准备

1、 准备一个Logo文件

2、 准备登录页面FeishuSSOLogin.aspx及动态链接库AprisoOAuthLogin.dll

▶第二步,修改Logon.html(Apriso 2023)

(C:\Program Files\Dassault Systemes\DELMIA Apriso 2023\WebSite\Start)

增加以下配置:

代码语言:javascript
复制
<div id="ID0Feishu" class="enumItem client"><a class="item hidden" href="javascript:openLogonWindow('FeishuSSO')">
<div style="display:inline-flex; margin-right:10px;"><img style="width:80px;height:27px;" src="FeishuLogo.svg"></div>
<div style="display:inline-block;"><h2>Feishu SSO</h2>
<p><desc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Log in By Feishu SSO.</desc></p></div></a></div>

▶第三步,修改Control.js中的openLogonWindow方法(Apriso 2023)

(C:\Program Files\Dassault Systemes\DELMIA Apriso 2023\WebSite\Start)

代码语言:javascript
复制
function openLogonWindow(method) {
  var target;

  switch (method) {
  case 'standard':
    target = "/Apriso/Portal/Kiosk/Login.aspx?BackToStartPage=true"; break;
  case 'equipment':
    target = "/Apriso/Portal/Kiosk/Login.aspx?BackToStartPage=true&EquipmentLogin=true"; break;
  case 'windows-integrated':
    target = "/Apriso/Portal/Kiosk/NTLogin.aspx"; break;
  case '3ds-passport':
    target = "/Apriso/Portal/Kiosk/ThreeDSPassportLogin.aspx"; break;
  case 'FeishuSSO':
    target = "/Apriso/Portal/Kiosk/FeishuSSOLogin.aspx"; break;
  default:
    return;
  }

▶第四步,创建修改Web.config

(C:\Program Files\Dassault Systemes\DELMIA Apriso 2023\WebSite\Portal)

1、 增加Section

代码语言:javascript
复制
<section name="FeishuSSOClientConfig" type="AprisoOAuthLogin.FeishuSSOClientConfig, AprisoOAuthLogin" />

2、 增加Section configuration:

代码语言:javascript
复制
<FeishuSSOClientConfig AppID="***" AppSecret="***" AuthorizeUrl="https://passport.feishu.cn/suite/passport/oauth/authorize" TokenUrl="https://passport.feishu.cn/suite/passport/oauth/token"  UserInfoUrl="https://passport.feishu.cn/suite/passport/oauth/userinfo" RedirectUrl="http://LP15-CSO5-CHN /Apriso/Portal/Kiosk/FeishuSSOLogin.aspx" />

其中:

AppID:应用ID(appId),需要在SSO服务器中创建应用后获取

AppSecret:应用密码,需要在SSO服务器中创建应用后获取

AuthorizeUrl:获取Code链接

TokenUrl: 获取Access_Token链接

UserInfoUrl:获取用户信息链接

RedirectUrl:SSO授权后的回调链接

▶第五步,部署文件

1、 复制FeishuLogo.svg到:C:\Program Files\Dassault Systemes\DELMIA Apriso 2023\WebSite\Start;

2、 复制FeishuSSOLogin.aspx到:C:\Program Files\Dassault Systemes\DELMIA Apriso 2023\WebSite\Portal\Kiosk

3、 复制FeishuOAuthLogin.dll到:C:\Program Files\Dassault Systemes\DELMIA Apriso 2023\WebSite\Portal\bin

测试

▶第一步,验证登录选项页面

▶第二步,验证飞书单点登录

1、如果浏览器尚未登录飞书账号,则自动跳转到扫描二维码登录页面,通过手机飞书APP扫描二维码实现登录

2、如果浏览器已经登录飞书账号,则可以直接点击“授权”进行单点登录

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智能制造社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档