如何在 BizTalk 2013 R2 中存储 JWT 令牌?

Posted

技术标签:

【中文标题】如何在 BizTalk 2013 R2 中存储 JWT 令牌?【英文标题】:How can I store a JWT token in BizTalk 2013 R2? 【发布时间】:2021-08-30 08:09:39 【问题描述】:

我需要存储一个 JWT 令牌,以便通过 BizTalk Server 2013 R2 中同一业务流程的多个实例使用它。

如何存储它并在每个实例中调用它?本地存储?注册表项?其他地方?

【问题讨论】:

您为什么要在编排中执行此操作?通常对于身份验证令牌,我在获取和缓存身份验证令牌的发送端口上使用自定义端点行为。 我不想在编排中存储或获取令牌。我正在开发一个端点行为来做到这一点。我想知道在哪里/如何存储它以重新使用它。我的令牌在 1 小时内有效,例如,如果 ESB 收到请求,它会获取令牌然后处理请求并终止他的第一个进程,然后如果我在第一个请求后 20 分钟收到另一个请求,我想重新使用令牌仍然有效。这就是为什么我想把它存储在某个地方。 应该有一种方法可以在没有外部存储的情况下将其保存在端点行为中,这就是我使用的 Salesforce OAuth 行为的工作方式。当我有机会时,我会看看它是如何做到的并发布答案。 【参考方案1】:

您需要做的是拥有一个静态类的令牌管理器类。一旦实例化,它将可以将您的 JWT 令牌保留在其私有变量中,并且只要您不重新启动主机实例就可以持续存在。您还需要保留上次获取令牌的时间,并在过期时获取新的令牌。

下面是一个模拟示例。

public static class TokenManager
    
        private static DateTime _sessionLastRefreshDate = DateTime.Now;
        private static string _JWTToken = string.Empty;
  
        public static string GetSession(...)
        

            //get current date time
            DateTime now = DateTime.Now;
            //get the difference from the last time the token was fetched
            TimeSpan diff = now.Subtract(_sessionLastAccessDate);

            if (_sessionId == string.Empty || (diff.TotalMinutes >= *TokenTimeOut*)
            
               // Fetch JWT Token here
                        _sessionId = *NewJWTToken*;
                        _sessionLastRefreshDate = DateTime.Now;
            

            //give the session ID to the caller
            return _sessionId;
        
    

【讨论】:

以上是关于如何在 BizTalk 2013 R2 中存储 JWT 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

Biztalk 2013 R2 开发环境安装

Biztalk 2013 R2 完整应用开发实验

BizTalk 2013R2 WCF-LOB Oracle Adapter安装配置/问题&解决方法

如何在 BizTalk AS2 接收中使用“引用打印”内容传输编码?

BizTalk管理实践

如何在 Visual Studio 2005 中抑制单个 BizTalk 警告