互软研发团队

Talk is cheap. Show me the code.

BUA .NET客户端如何动态修改上下文的应用系统参数(如:应用代号)

出于安全角度的考虑,一般情况下使用BUA .NET客户端是无法修改上下文的应用系统参数的,这些参数在Web.config文件的BUAClient配置节进行修改。如果你想要访问另一个应用系统的权限、角色等信息。你需要做以下两件事情:

1、具有被访问应用系统的密码(ApplicationPassword)。

2、通过代码修改BUA客户端的运行时配置,参考代码如下:

// 复制一份运行时配置用于动态修改完成以后恢复回去
var oldConfig = RuntimeConfig.Instance.Clone();
var config = RuntimeConfig.Instance;
config.ApplicationCode = "xxx";
config.ApplicationPassword = "xxx";
// 调用BUA客户端提供的接口
......
config.ApplicationCode = oldConfig.ApplicationCode;
config.ApplicationPassword = oldConfig.ApplicationPassword;

SSO如何设置用户在一段时间内重复登录失败超过限制次数不允许再登录

1、确认SSOService.config配置使用的ProvideUser使用Beyondbit.SingleSignOn.Core.UserVerifyProvider。

2、打开Settings.xml文件,定位到<Setting><Security><AfterVerify><Repeats>节点。

3、设置<Repeats enable="true">启用重复登录失败检测。

4、修改<Data><Info>的配置信息,格式 :[数据存储模式] [重复登录次数] [重复失败登录时间] [失败以后锁定时间],例如:

D 5 0:30 0:05

数据存储模式:D|M|R。D=Database、M=Memory、R=Remoting。

重复登录次数:整数值。

重复登录时间:在这个范围内允许用户最大重复登录次数。

失败以后锁定时间:超过重复登录次数以后的锁定时间。

5、修改<Failure>设置重复登录超过限制次数以后的提示信息,例如:当前用户超过登录次数,请5分钟后再登录。

6、保存Setting.xml文件,重启应用程序池。

7、如果数据存储模式使用Database,需要初始化数据库和数据表VerifyFailure。使用附件VerifyFailure.sql。

8、在<Info>节点同级配置<Source>的值为数据库连接字符串。例如:

<Source>Database=SSO;Server=192.168.101.175;Uid=sa;Pwd=111qqq!;</Source>

VerifyFailure.sql (301B)

UFFICE 7 部署工作量参考

UFFICE 7 部署工作量参考.docx (219.9KB)


文档中包含:
1 部署工时计算
2 端口开通
3 安装环境信息
4 安装补丁下载地址

使用账号和密码实现SSO的模拟登录

公司的统一身份认证及单点登录服务系统,简称SSO。当用户登录自己的身份认证系统以后希望使用账号和密码模拟登录公司的SSO产品,我们推荐以下两种方式:

1、基于form的POST登录

SSO提供了Login.aspx页面,表单POST以后只需要包含以下命名的输入元素即可完成登录:

  • userUid: 账号,必须
  • password: 密码,必须
  • successUrl: 登录成功以后跳转的地址,可选
  • failUrl: 登录失败以后跳转的地址,可选。emsg会添加到URL查询参数用于获取失败原因。
  • loginedUrl: 用户已经登录过SSO跳转的地址,可选。

2、基于ajax的POST登录,缺点是无法跨域。POST时发送的数据和第一种方式一样。参考示例:

<script type="text/javascript">
    $(document).ready(function () {
        $.post(
            "http://192.168.40.104:30101/Login.aspx",
            {
                userUid: "administrator",
                password: "123456"
            },
            function (response) {

            }
        );
    });
</script>

我们不建议直接模仿SSO的登录页面(/Login/Form.aspx)元素去完成模拟登录,因为这样可能会引发一些不可预期的错误,比如遗漏原来在登录前后执行的客户端脚本代码。

P.S. 如何让SSO为特定用户颁发ticket并使用ticket完成身份认证的解决方案请参考其它博客。



UFFICE 7移动应用支持钉钉PC版本登录解决方案

UFFICE 7移动解决方案如何支持在钉钉移动版本运行可以参考之前的一篇博客:UFFICE 7 移动解决方案-钉钉。由于早期钉钉的jsapi在移动端和PC端分别采用不同的API获取授权码,直接导致了我们在之前的解决方案里并未提供钉钉PC版本的兼容支持。目前新版本的钉钉jsapi已经统一了获取授权码的API设计(dd.runtime.permission.requestAuthCode)。正在使用我们之前解决方案的项目团队可以参考以下步骤支持钉钉PC版本:

1、打开SSO目录下的/PlatformApp/DingDingLogin.html文件。

2、注释本地引用dingtalk.js的代码。

3、新增钉钉最新版本jsapi的引用:

<script src="//g.alicdn.com/dingding/dingtalk-jsapi/2.0.57/dingtalk.open.js"></script>


参考:

https://open-doc.dingtalk.com/microapp/dev/welcome-to-lark

UFFICE 7门户实现不同角色的用户登录加载不同的首页模板

1、修改UFFICE 7门户的Web.config文件,在<appSettings>配置节新增IsSingleRole=false。默认UFFICE 7的模板引擎不启用多角色支持。参考:

<add key="IsSingleRole" value="false" />

2、访问BUA的权限管理,定位到UFFICE 7的应用系统下。打开第一层权限菜单,可以看到有一个名为“Razor模板角色”的权限。

3、在Razor模板角色下新增权限,这个权限的名称就是编辑页面模板中对应的角色(它不是真正的角色)。之后只需要根据用户隶属不同的角色赋予它对应的该权限即可。例如:新增一个名称为"区领导"的权限。

4、重新启动memcached服务。由于当前登录的用户可能是UFFICE 7应用的管理员角色,会导致这个时候访问门户出现找不到对应角色的模板。直接在浏览器输入门户页面模板编辑的地址:http://xxx/Portal/Settings/Page。

5、在协同办公3.0分类下新增一个首页模板,模板的标识需要和首页模板的标识相同(例如:index)。选择之前的角色"区领导",模板内容可以使用之前所有人的模板。最后单击保存。

6、重新访问UFFICE 7的门户,administrator账户已经可以正常访问了。


UFFICE 7部署入门(一)配置缓存服务器地址

UFFICE 7默认使用memcached作为自带的缓存服务,对应的缓存服务器地址需要在数据库中进行修改。

一般基于UFFICE 7安装包部署后,数据库实例中会有一个名为"MemcacheConfigDB"的数据库。访问该数据下名为"Memcahed_Services"的数据表可以看到默认配置的memcached节点地址:


当在多台服务器部署缓存服务后,可以修改数据库中配置的地址。修改完成以后,需要重新启动部署UFFICE 7的IIS或者相应站点的应用程序池。

统一身份认证及单点登录服务系统v2以上版本使用的安全协议

统一身份认证及单点登录服务系统即SSO(Single Sign-on)是公司的一个标准产品。SSO是单点登录解决方案的总称,目前公司的产品支持两类协议:

1、SAML

2、BSSO

SAML是行业内的一个标准,而BSSO是公司自主定义的安全认证协议。默认使用SAML。

如何将BUA的应用系统整合到UFFICE 7管理中心顶部菜单显示

1、打开管理中心(Administration)站点的Web.config,查看<appSettings>下名为"IntegrateContainer"的值,例如:CentralAdministration

2、访问BUA的权限管理,编辑要整合的应用系统。修改应用系统的"应用系统集成模式"字段。格式:#{IntegrateContainer}${StartPrivilegeCode}#

{IntegrateContainer}:对应管理中心的配置

{StartPrivilegeCode}:起始权限菜单代号,如果希望从根权限加载可以为空

示例:#CentralAdministration$BUA#

基于WeChatJavascriptSdk的企业微信jsapi访问出错提示"接口调用超过限制"解决方案

# 问题现象

基于MobilePortal整合企业微信以后,频繁刷新应用一段时间会出现提示:微信获取JavaScriptTicket异常:45009,文本:api freq out of limit, hint: [1545303237_2_5380272362b73d58bce5bb54879e0216], more info at https://open.work.weixin.qq.com/devtool/query?e=45009。

# 问题原因

造成以上问题的原因是企业微信提供的过期时间字段(expires_in)没有被赋值给过期时间重新计算,导致每次请求jsapi ticket都是过期重新获取状态。

#解决方案

更新附件的Beyondbit.Web.Infrastructure.dll文件,如果目前使用的该dll版本大于2.0.6929.1可以忽略该问题。

Beyondbit.Web.Infrastructure.dll (84KB)