我正在研究通过HTTP公开的API,这些API将由合作伙伴公司使用并部署到其众多客户端。
在某些情况下,客户端将基于浏览器。这是我的主要关注点,但我可能会在客户端是Windows应用程序的情况下应用相同的模式。我认为,当Windows应用程序与基于浏览器的应用程序相比时,在客户端上保护私钥的范围更大。因此,正在进行的通信是从合作伙伴应用程序呈现的浏览器页面到我们托管API的服务器。
底线是我们无法提示最终用户提供凭据,并且必须依赖将随每个请求传递的存储密码/密钥/令牌。我担心的是,我想阻止合作伙伴公司将此令牌烘焙到客户端代码中。以下是该场景的高级描述。
出于这个问题的目的,我将跳过第1步,重点关注第2步和第3步。
我目前正致力于保护此API并提出以下设计:
我们在这里有一种联邦安全形式,如果用户通过合作伙伴进行身份验证,那么我们假设他们可以访问我们的API。我可以想到的唯一方法是避免将私钥/身份验证令牌烘焙到客户端代码中,这就是这种回调机制。
我过度复杂了吗?还有其他更简单的方法吗?我知道如果任一站点对XSS开放或被恶意软件攻击,所有投注都会关闭,但至少不将私钥呈现为javascript或标记,用户无法右键单击查看源并告诉每个人私钥。
编辑:发现了这个问题。最上面的答案描述了类似于我所描述的内容,虽然提到了WIF,我不想强迫合作伙伴实施(他们甚至可能不运行Windows)。仍然希望对我的方法提出反馈......
答案 0 :(得分:0)
我知道您要求进行简化,但是您是否已经开始探索SAML联盟,其中每个合作伙伴在启动应用程序时都会向您声明其身份,并且您使用身份验证令牌对其进行了限制?它避免了JS的全部涉及,并与SSL + CSRF令牌一起使用,使您处于一个好位置。