使用相同的 REST 资源的多种身份验证方法

问题描述 投票:0回答:1

假设您正在构建 REST API,这些 API 可以从不同类型的消费者(人类用户、事物、不受信任的本机应用程序)访问,因此每个人都有自己的身份验证方法,用于技术或“历史”决策。

例如,用户使用带有某些声明模型的 JWT,而本机应用程序则通过 Oauth2 流进行授权并使用 OAuth 令牌。虽然两者都希望访问相同的端点,因此应用程序需要区分不同模型的身份验证信息并将它们路由到适当的服务

添加 HTTP 标头“X-Auth-Method”并在每个传入请求时检查它很容易,但我问自己它是否足够 RESTful,最重要的是,这会给第三方消费者带来问题想要集成他们的软件并且必须了解/实现某种特定于供应商的行为。

另一个解决方案是提供不同的根端点

  • api.myapp.com/v1/userapi
  • api.myapp.com/v1/clientapi

然后让 API 网关将请求路由到适当的身份验证服务验证步骤,但实际上两者都公开完全相同的 API。

以 RESTful 方式并意识到构建开放生态系统时出现的所有问题,什么会更正确?

rest http authentication api-design
1个回答
0
投票

您可以通过不同的名称来提供 API: api-basic.myapp.com (那个进行 HTTP 基本身份验证) api-oauth.myapp.com (OAuth2 的那个) api-whatever.myapp.com (天空是极限...)

然后,您可以为每种类型的客户指定正确的名称。

这些名称可以指向相同的端点,该端点的行为会根据名称而有所不同(例如:kubernetes ingress),甚至完全指向不同的端点(例如,IP 1 上的入口和 IP 2 上的单独 Nginx 反向代理) .

© www.soinside.com 2019 - 2024. All rights reserved.