首页 > 解决方案 > 如何在 dotnetcore 中兑换验证码和管理 JWT

问题描述

我有一个反应 SPA - 它调用自定义身份管理器,如果成功,则使用身份验证代码响应 SPA 应用程序。例如:

https://my-identiymanager.com/authorize?response_type=code&client_id=******&redirect_uri=https://localhost:5001&scope=openid

它有效,我在重定向 URL 中得到了一个代码。现在,我想调用我的 dotnetcore web api 并使用此代码,以便服务器端 webapi 可以获取和维护浏览器会话的 JWT。

这是一种有效的方法吗?我找不到任何示例,其中 SPA 应用程序 - 自行 - 从自定义身份管理器获取代码,然后将其传递给 webapi,以便可以在服务器上安全地获取和维护 JWT。我真的必须手动构建整个 JWT 维护吗?这似乎是错误的——好像我没有正确地接近这个设计。

在我看来,如果 webapi(服务器端)可以安全地兑换代码,在使用代码后存储和维护 JWT——我会在客户端上设置一个 cookie,以便在后续调用时可以识别它并使用正确的 JWT发出请求。

标签: .net-coreoauth-2.0jwtasp.net-core-webapiidentity

解决方案


我认为您可以参考azure ad auth code flow,它可以帮助您了解 azure 在这种身份验证和授权方面做了什么。

在此处输入图像描述

您想将身份验证代码设置为服务器然后让服务器生成访问令牌,我认为这违反了安全规则,尽管身份验证代码只能使用一次。但是让我们看看,如果有人能抓到验证码,为什么他不能抓到你的密码和用户帐户呢?这就是为什么我们创建访问令牌来访问受保护的 Web API。因为当访问令牌被捕获时,只有特定的 API 有风险。其他人不知道其他 api 的 url 及其所需的范围。

azure ad 所做的是让用户登录并从重定向的 url 中获取验证码。然后使用具有特定 api 范围的代码来生成访问令牌。这个令牌可以被解码,我们可以看到诸如用户ID、范围(对于v2.0令牌或v1.0令牌的资源)、过期时间等声明。这些声明是服务器需要验证的只有具有正确源范围的令牌才能用于访问特定的 API。

在前后端分离方案中,后端或服务器在访问api之前需要过滤访问令牌来判断它,而前端如react或其他框架编写的SPA,应集成身份服务器并提供登录模块和生成调用 api 的访问令牌。

这是一个使用 react 集成 azure 广告的代码示例。


推荐阅读