一、 问题提出
在BizTalk应用集成项目中,BizTalk集成了多个应用系统,在BizTalk应用里很可能会出现有多个(甚至很多)端口指向同一个应用(这个应用可能是SAP系统,也可能是一个SQL Server的数据库),类似这样:
在每个端口的设置中都需要设置用户凭据,如果是SQL Server的话,就是SQL的用户名和密码:
一般使用中都是对每个端口分别就行设置,分别设置每个端口的用户凭据,输入用户名和密码。
如果端口不多的情况下,这么做也很正常,但是如果针对某一个系统的端口比较的的时候,比如连接到外部一个SQL Server数据库的端口有几十个,那么每个端口都需要输入一遍同样的用户名密码将是很麻烦的事情。
二、 解决方案
针对这样的情况,有个很好的解决方案。BizTalk本来就依赖也ESSO(Enterprise Single sign-on)服务,用来保存物理端口的配置参数,而ESSO具有用户映射的功能,即把Windows的用户映射为外部用户。
每个BizTalk的物理端口都会运行在某个BizTalk的主机实例下,而每个BizTalk的主机实例都是一个Windows服务,由一个Windows账户启动。所以我们只需要把运行这些端口主机实例的那个Windows账号统一映射为某一个账户就可以实现统一设置了。
下面是具体步骤:
1、 建立SSO关联应用
在ESSO中建立关联应用,针对需要映射用户的外部系统在SSO中建立关联应用,比如BizTalk需要跟外部一个TestApp的应用连接,并且有很多端口指向这个系统,而这个系统暴露给BizTalk的是个Sql server数据库。
打开SSO Administration,新建一个关联应用:
创建一个叫TestApp的关联应用,一路默认设置:
2、 新建用户映射
在新建的关联应用中,新建一个用户映射:
选择需要映射的Windows账户,这个账户是运行这个应用对应那些端口的BizTalk主机实例的那个Windows账户,必须是域账户。外部用户就是TestApp的Sql server数据库给BizTalk系统提供的访问数据的用户:
为数据库用户设置密码:
用户映射建立后:
可以看出,在TestApp应用中,sql2008这个域用户映射到外部SQL数据库的gkj这个用户,用户的密码也保存在ESSO数据库中。
3、 端口中设置
先查看主机实例,BizTalkServerApplication主机实例的启动用户为cmict\sql2008,即为前面ESSO中设置的用户映射的那个Windows域用户。
再看一个连接TestApp的sql端口的设置,注意主机实例为BizTalkServerApplication,说明此端口对应的Windows的用户就是cmict\sql2008:
端口配置,在WCF-SQL端口的属性中,凭据标签,选择“使用单一登录”,关联应用选择TestApp即可:
在TestApp已经设置cmict\sql2008映射到外部用户gkj,并保存了密码,所以BizTalk根据这里的设置会到ESSO数据库中查到gkj用户和密码,作为用户凭据访问外部数据库。
所有连接TestApp应用数据库的端口,用户凭据的设置都可以选择使用ESSO凭据,指向TestApp即可,无需给每个连接TestApp应用数据库的端口分别设置用户名和密码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
2006-03-12 单点登录(SSO)的核心--kerberos身份认证协议技术参考(三)