单一登录 - BizTalk 解决 SSO 错误"Unable to redeem ticket, no ticket exists in the message"



我正在使用BizTalk适配器包中的Oracle适配器(BTS 2006 R2基于WCF)。在"请求响应"发送端口的配置中,我使用了Oracle的用户名和密码来连接到数据库。

现在我想更改它并使用SSO。到目前为止,我已经创建了联盟应用程序,并将BTS主机实例"用户id"映射到Oracle数据库的用户详细信息。

当我运行应用程序时,我经常收到错误:"无法兑换票证,消息中不存在票证"。

通过阅读BTS文档,我在"ms-help://MS.BTS.2006/BTS06CoreDocs/html/c7bf755c-c37d-4b19-9817-a7f42e1e9656.htm":在编排调用发送适配器的情况下,BizTalk消息引擎会将消息发送到MessageBox数据库。编排应确保SSOTTicket上下文属性和Microsoft。BizTalk。XLANGs。BTX发动机。维护包含票证的消息的OriginatorSID上下文属性。当适配器从MessageBox数据库接收到此消息时,适配器会使用加密票证调用RedeemTicket方法,以从SSO存储中检索后端凭据。设计编排的用户应专门将此属性复制到消息中。

但我通过SQL集成连接收到一条消息,该消息没有SSO票证。

请帮助解决此问题?

您可以在发送端口的自定义管道组件中添加SSO票证

    public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)
    {
        ISSOTicket ssoTicket = new ISSOTicket();
        pInMsg.Context.Write("SSOTicket", "http://schemas.microsoft.com/BizTalk/2003/system-properties", ssoTicket.IssueTicket(0));
        return pInMsg;
    }

这将为Biztalk主机实例服务帐户生成一个票证,因此您的Oracle附属应用程序映射应该如您所期望的那样工作。

您可能需要在SSO管理员中"允许票证"访问系统属性。如果没有这一点,即使你允许会员应用程序的门票,它也不会起作用。

最新更新