使用OpenID Connect保护web应用程序和api



我不想再使用我自己的安全,正在考虑将OpenID Connect与我的c#API和AngularJS应用程序结合使用。我可以把这些都做好。然而,我的大脑似乎无法理解如何在两种使用情况下正确地保护我的API:

用例1:AngularJS SPA

我的AngularJS应用程序连接到我的API,并发送一个标识用户的承载令牌,其中包括用户声明。这个很简单,上面有很多文档

用例2:neneneba API至API

一些客户希望直接访问我的API,而不是通过我的AngularJS应用程序。在这种情况下,我认为我可以使用客户端ID/Secret进行基于脚趾甲的身份验证,这很好,只是我对使用客户端ID/Seret的用户一无所知。可能有10个用户使用相同的自定义API调用我的API。如何通过API调用获取用户信息?我看到其他人使用API密钥,然后他们查找用户并创建JWT,但我认为可能有一种更简单的方法。有什么想法吗?

API到API身份验证的全部要点是没有用户上下文。或者,在这种情况下,用户就是试图访问API的机器。然后,您需要围绕这一点设计授权逻辑,并实现基于范围的权限。或者,您可以选择使用您提到的api密钥,或者如果您希望在api到api场景中使用带有用户上下文的OAuth协议,那么ResourceOwnerCredentials流就是一个选项。

API到API的通信

您可以使用通过OAuth 2.0定义的客户端凭据授予。这不需要您拥有最终用户凭据。现在这将不是OpenID Connect。OpenID Connect需要最终用户的参与并绑定到身份验证。另一方面,OAuth 2.0是关于授权的,检查实体是否可以访问资源。

使用客户端凭据授予,您的身份服务器将为特定客户端颁发令牌。因此,您的一个API就成为了客户端(资源消费者)。从请求处理API端点,您可以接受有效令牌并使用资源进行响应。

如果您需要来自请求处理API的细粒度访问控制,则需要使用令牌自省来识别此令牌的颁发对象。在这种情况下,它将识别特定的客户端身份,并在其上执行逻辑。您可以检查令牌自省响应来识别这些细节。

或者,访问令牌可以采用JWT的形式。如果是这种情况,它们可以被视为自包含的令牌,因此验证很简单。

最新更新