具有同源策略和 OAuth 的 REST API 身份验证

Posted

技术标签:

【中文标题】具有同源策略和 OAuth 的 REST API 身份验证【英文标题】:REST API Authentication with same origin policy and OAuth 【发布时间】:2012-04-30 09:08:21 【问题描述】:

我正在编写一个 API,供我的 javascript 应用程序(同一个域,API 位于 api.example.com 和站点 example.com 以及第 3 方开发人员(移动设备、桌面设备等)使用。现在我想使用 OAuth但我不知道同时使用 OAuth 和使用具有相同来源策略的应用程序时的工作流程。

如何在我的网络应用中验证用户身份?当我发送用户名和密码时,我可以检查请求是否来自我的域,然后返回令牌吗?令牌将存储在 cookie 中,并在每次请求时发送回服务器。所以有两部分:

    如果请求来自我的域,只需检查令牌,否则抛出 HTTP 异常。 如果不是我的域,请进行 OAuth 身份验证。

这可能吗?如何在 asp.net Web API 中进行设置? (主要是检查请求是否在同一个域中)

【问题讨论】:

【参考方案1】:

我猜想登录您的网络应用程序时您没有使用 OAuth,而只是接受用户名和密码并开始会话?如果是这样,您真的不必为自己的网站使用 OAuth。

将会话 cookie 设置为在 *.example.com 上有效,您应该能够在 site.example.comapi.example.com 上验证该 cookie。

例子:

    请求进入api.example.com/verify_credentials.json 如果 OAuth 验证成功,则提供响应。 如果没有,请尝试 Cookie 验证 - 如果成功则提供 如果两者都失败,则返回 402 Unauthorized

这是一个关于跨子域共享 cookie 的帖子:ASP.NET Subdomain Cookie (parent and one subdomain)

【讨论】:

以上是关于具有同源策略和 OAuth 的 REST API 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

SPA 和 Spring Boot Rest Api 应用程序中具有授权代码授权类型的 OAuth2 流

oauth2 策略与 ruby​​ on rails 与许多具有 API 的客户端

Arcgis api for js 开发的html中,同源策略不允许读取,跨域问题怎么处理

SpringBoot rest-api+Vue CORS跨域.md

rest_framework 跨域和CORS

Quarkus Rest客户端和OAuth2