REST API的单点登录支持

8
我正在寻找解决以下问题的最佳方法:我们的应用程序是SaaS,支持SAML进行Web登录。该应用程序还公开了REST API,应该在自动化和无人值守的过程中使用,这意味着没有交互式用户来输入凭据。我们需要允许开发人员针对相关IdP(已经定义,因为用于API访问的相同凭据也可以用于访问Web应用程序)对无人值守流程进行编程身份验证。
我想象的流程如下:程序使用专用API进行身份验证,获取令牌并将其用于下一次调用。
当搜索保护REST API的最佳方法时,我发现大多数答案建议使用oAuth,通常需要交互式用户,因为它们讨论的是交互式应用程序尝试代表用户访问其他系统上的REST API,而用户在那里输入密码。oAuth是否也是我面临挑战的答案?如果是,流程是什么?
谢谢!
1个回答

2

确实,OAuth 2.0可以用于此用例,因为它允许所谓的客户端(即您的无人值守进程)获得由开发人员授予的访问令牌,并使用该令牌来访问您的API。

这里要使用的典型流程是代码流程:如果开发人员同意,您将运行授权服务器向客户端发放令牌。开发人员将使用SAML Web SSO登录授权服务器。

请注意,在访问REST API时不需要活动用户,但在发放令牌时需要一个活动用户。我相信这正是您实际要寻找的。如果不是,还有其他可以利用的流程,它们根本不需要活动用户,但我认为它们不适用于这个特定的用例;毕竟您希望客户端代表开发人员操作。

您的授权服务器还可以向客户端发放刷新令牌,除了访问令牌之外,以便在旧访问令牌过期时,您的客户端可以使用刷新令牌从授权服务器获取新的访问令牌,而无需再次(交互式地)涉及开发人员。


1
Hans,实际上,我正在寻找完全无人值守的流程。这意味着开发人员是具有访问Web登录凭据的用户,我希望他能够以编程方式使用相同的凭据获取令牌并使用它来访问API。因此,令牌发放也是一个无人值守的过程。这有意义吗?应该是什么流程?特别是,如果授权服务器参与流程,它应该在我的一侧(作为服务提供商)还是在身份提供者一侧?SP方面知道密码有意义吗? - Moshe B.
嗯...也许你回答中的最后一部分就是我正在寻找的。 - Moshe B.
1
并不是真的,还有针对PKI评论的回应:您应该将身份验证留给身份提供者,并且不要对其实现做出任何假设(例如PKI或用户名/密码);但是,根据您与IDP的关系,您的情况可能会有所不同:资源所有者密码凭据授权将要求开发人员在您的客户端中键入他的IDP用户名/密码,这违背了SAML的目的,并固有地将身份验证方式锁定为用户名/密码(例如无法升级到多因素和/或PKI)。 - Hans Z.
一个相关的问题 - 假设我使用oAuth 2.0,用户X已经通过身份验证并获得了访问令牌和刷新令牌。现在,用户在IdP中被删除,并且不应该访问API。但是令牌仍然有效,即使使用刷新令牌,用户也不会再次针对IdP进行验证。因此,已删除的用户具有API访问权限。我在这里有哪些选择? - Moshe B.
1
对于这种情况,您可以使用类似SCIM的工具在SP和IDP之间同步帐户的配置/取消配置。 - Hans Z.
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接