这是一个概念上的挑战,我正试图把我的思绪包裹起来。假设我有一个SSO(单点登录)服务和两个使用它的独立Web服务。假设SSO登录是通过OAuth进行的,就像登录Facebook一样。 (纠正我,如果我错了,他们不只是为相关网站请求OAuth访问令牌。)
问题是,两个Web服务应该如何向第三方公开自己的API?鉴于我们已经喝醉了OAuth kool援助,第三方应该被视为OAuth消费者并且他们应该请求用户批准他们的访问令牌,这似乎是合乎逻辑的。接受问题的是,Web服务是否应自行处理所有这些OAuth内容,让第三方注册为OAuth使用者并仅使用SSO登录用户?或者,Web服务是否应将所有责任交给SSO服务?对于已签名的请求,Web服务将通过SSO的API检查访问令牌的有效性,然后照常处理。
我看到两种方法的优点和缺点。一方面,第一个选项对SSO提出的要求较少,每个Web服务都可以按照自己的方式处理API的授权。另一方面,让SSO处理事物意味着第三方可以获得在所有服务中有效的访问权限,就像用户可以在所有服务中登录一样。
这可以提供更好的用户体验,否则第三方可能不得不继续询问用户授权,因为它需要使用系统的不同Web服务,尽管用户看不到不同的Web服务之间的分离。当然,然后要么SSO需要某种共享权限规则,要么每个Web服务仍然需要强制执行自己的规则。此外,当要求用户授权第三方服务时,SSO可能必须从Web服务中获取某种文本或HTML。
有什么建议吗?是否有任何现有的,公开记录的系统可以做得很好?我只是过分复杂了整个事情吗?