Mendix如何利用SAML进行单点登录(SSO)

导语

当利用Mendix建立多个App之后,每个App的用户帐户必须跟企业的认证方案集成,才能简化用户的登入程序,达到用户管理的一致性。针对App开发者,本文将介绍如何透过Mendix的SAML组件,让本地端运行的Mendix App跟Active Directory Federation Services (AD FS)服务器集成,以便在开发过程可以测试及验证单点登录程序。

1. 什么是SAML

安全声明标记语言 (SAML) 是一个开放标准,允许身份提供者(IdP)将授权凭据传递给服务提供商(SP),让用户可以使用一组凭据就可以登录及使用许多不同的网页应用。

用户利用用户代理(通常是Web浏览器)来请求受SAML服务提供商保护的Web资源。希望知道请求用户身份的服务提供商通过用户代理向SAML身份提供者发出身份验证请求。

SAML协议交互过程

 

2. 对于AD FS的要求

在本次的测试环境中,AD FS扮演身份提供者,而Mendix App则是服务提供者。AD FS做为SAML的身份提供者,需要有一个SSL凭证,用于为联合身份验证服务提供HTTPS请求。针对我们要进行的单点登录任务,AD FS上的SSL证书必须满足以下要求:

  • 凭证是公共信任的(用于生产部署)

  • 凭证包含服务器身份验证增强密钥用法(EKU)值

  • 凭证在主题或主题备用名称(SAN)中包含联合服务名称,例如siemensdc.siemens.demo

测试环境总共使用了两台虚机。第一台是AD域控制器,其中包含了目录服务(AD DS)、域名服务(DNS)等。第二台则是安装了凭证服务(AD CS)、联合服务(AD FS)以及Mendix Studio Pro,并且加入第一台控制的网域。AD FS所需要的SSL凭证,一般是要从公开的凭证认证机构(CA)取得,在这次的测试环境则是由AD CS产生。

关于如何从AD CS产生新的SSL凭证并用于AD FS的安装配置,可参考此链接:

https://geekdudes.wordpress.com/2017/01/03/installing-ad-federation-service-on-windows-server-2016/

3. 在Mendix上的SAML配置

以下依序介绍如何在Mendix App中加入SAML组件并进行相应的配置,以达到单点登录目的。

  • SSL Proxy

 由于AD FS要求服务提供商使用HTTPS,而Mendix在本地端运行时只能使用HTTP,解决办法就是下载安装一个简单的SSL Proxy。

先下载安装Node.js 在命令提示符窗口执行 ”npm install -g local-ssl-proxy”执行 “local-ssl-proxy --source 9090 --target 18080”。实际Mendix运行端口是18080,但用户可用https://localhost:9090登入Mendix App。

  • 下载SAML组件

从App Store下载SAML组件:https://appstore.home.mendix.com/link/app/1174/

以及Mx Model reflection组件:https://appstore.home.mendix.com/link/app/69/ 

并加入App项目中。

  • SAML20.Startup

在项目设定内,选择SAML20.Startup为项目启动后执行的微流。或是将SAML20.Startup加入原先项目的启动微流中。

设定App的网址为https://localhost:9090,执行时期端口为18080。

设定App的导览选单,增加SSO配置功能,当点击时呼叫SAML20.OpenConfiguration微流。

  • 导览选单

设定App的导览选单,增加用户管理功能,当点击时开启Administration.Account_Overview 页面。

  • 项目权限

设定项目权限,将项目的管理者角色对应至其他模块的管理者角色。

在Mendix Studio Pro点击上方Run Locally按钮。待服务就绪后,点击View按钮启动浏览器,以MxAdmin账号登入。

点击导览选单中的SSO Configuration,进入SAML配置页面。如果遇到网页安全凭证的提示,请选择继续。

  • SP Configuration

打开SP Configuration页面,先输入组织及联络人信息(每个字段都要填),再按Save按钮,最后按Download SP Metadata下载服务提供商属性档案(sp_metadata.xml)。

 

  • AD FS管理器

在服务器管理器中打开AD FS管理器。

在AD FS管理器,执行Add Relying Party Trust…建立一个新的信赖凭证者信任。

 

  • Claims aware

选择Claims aware,然后按Start。

选择Import data about the relying party from a file,然后选择之前步骤下载的sp_metadata.xml,最后按Next。

 输入显示名称,然后按Next。

选择Permit everyone,然后按Next。

在检视设定页面可以查看目前的设定值,按Next。

因为要设定宣告签发政策,决定宣告须包含哪些属性,所以勾选Configure claims issuance policy for this application,然后按Close。

在Edit Claims Issuance Policy对话盒中,按下Add Rule…按钮。

选择Send LDAP Attributes as Claims,然后按Next。

设定规则显示名称,指定Active Directory为属性存放区,然后选择汇出E-Mail-Addresses和SAM-Account-Name两个属性以及其所对应的宣告类型,最后按Finish。

在Edit Claims Issuance Policy对话盒中,按OK按钮完成设定。

在AD FS管理器,找出Federation Metadata的URL。

在新的浏览器窗口输入Federation Metadata的URL :https://<hostname>/FederationMetadata/2007-06/FederationMetadata.xml,下载FederationMetadata.xml。

  • Mendix App

回到Mendix App页面,打开IdP Configuration页面,按下New按钮建立新的身份提供者组态。第一次执行时会要求同步对象,按下OK按钮继续。

 勾选所有模块后, 按右侧Click to refresh按钮,然后再按下方Next按钮。

输入身份提供者的别名,选择不要从URL读取IDP metadata, 然后选择之前步骤下载的FederationMetadata.xml,最后按Next。

在Configure Request Authentication页面,保留默认值,按Next。

在Mapping页面选择E-Mail Address作为用户主体属性。按Next。

选择Administration.Account作为用户对象,选择Name来储存用户主体属性。按Next。

基于测试的目的,在User provisioning页面选择允许模块创建用户并且指定新用户的默认角色。按Next。

按Save完成设定。

在IdP Configuration页面,选择新建的身份提供者, 然后按下Toggle Active按钮来激活。

大功告成,我们已经完成基本的SAML的配置。如果对于SAML组件内的各种选项以及登入行为的控制有兴趣的话,可以参考文件说明:

https://docs.mendix.com/appstore/modules/saml

4. 测试SSO

我们将使用网域管理者身份登入Windows,先确认管理者在AD的账号属性中有设定E-Mail Address。

在前述SAML组件的配置选项中,我们选择当用户身份被认证后,如果Mendix App没有该用户,会让SAML组件自动创建用户。所以在进行SSO登入之前,先检视目前测试用的Mendix App的帐号列表。

打开浏览器,输入网址https://localhost:9090/SSO,由于目前是用网域管理者身份登入Windows,测试App的SAML模块从AD FS获得身份认证后,自动创建了以[email protected]为帐户名称的用户,角色是User,然后成功以新建的用户自动登入了测试用的Mendix App。

5. 总结

本文介绍了在本地运行的Mendix如何利用SAML跟企业认证系统AD FS达成单点登录的步骤,App开发者可以在开发环境测试或探索各种可能的单点登录行为,除了可以快速变更调整之外,也不会影响生产环境的企业认证系统的运作。

这次使用的SAML组件是从Mendix App Store下载,不需要进行代码修改,仅靠配置的方式就能达到单点登录的目的,说明了Mendix 利用可重用组件以堆积木的方式开发App,确实可以大幅提升应用开发生产力。


更多信息,请访问以下链接:

Mendix官网:https://www.mendix.com/zh/

Mendix行业解决方案:https://solutions.mendix.com/

Mendix平台指南:https://www.mendix.com/evaluation-guide/

Mendix动画展示:https://www.mendix.com/demos/

Mendix公众号

谢谢阅读!

猜你喜欢

转载自blog.csdn.net/Mendix/article/details/114696014
今日推荐