我们产品的型号如下:
Api后端(无头)
我已经设置了oauth并准备使用 resource owner credentials grant 。任何想要使用我们的api的人都可以使用API密钥或其用户名/密码。当然,他们也需要他们的客户ID和秘密。
访问Api的SPA前端
我已经构建了一个SPA,它将使用api为我们的客户提供门户GUI。鉴于此客户端应用程序由我们拥有和管理(因此它是受信任的应用程序)如何使用oauth仅使用用户名/密码安全地验证用户?
最初它使用的是JWT auth系统,只需要用户名/通过,但现在我们已经实现了oauth,我想整合。让每个用户都需要拥有客户端ID和秘密来登录是不合理的,但我希望用户能够从GUI完全访问api。
我正在考虑使用CSRF令牌,但是当服务器端没有生成任何内容时,如何使用我的应用程序?
我不知道该怎么办。
编辑:非常相似to the problem here。
答案 0 :(得分:1)
您不应该使用JavaScript应用程序中的资源所有者凭据授予。您拥有和管理应用程序的事实并不能使其成为受信任的应用程序。
可信客户端是一个可以保密的应用程序。 SPA或任何JavaScript应用程序都无法保密。
您应该将implicit grant用于不受信任的客户端。
答案 1 :(得分:1)
我决定使用the solution described here。
And here is a snippet of my implementation
TL; DR版本
对我来说,这比在api上实现自定义的东西有几个优点: