.net-core - 如何在 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发出请求。
解决方案
我认为您可以参考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 广告的代码示例。
推荐阅读
- javascript - React onClick 改变分页数据落后一步
- spring - 通过 docker image 通过 kubenets 在 Azure 上部署 Spring MVC
- javascript - 存根未执行回调(Javascript)
- javascript - 如何从 FormData 获取图像到 Rails API 并保存在 ActiveStorage
- r - 在闪亮的情况下,我正在使用多个选择输入来更新数据集,但反应性无法正常工作?
- sql-server - 如何在 SSIS 中使用可变数量的空格构建动态连接字符串
- python - 如何从 SQLAlchemy 中的 id 池中获取每组前 n 个结果?
- oracle - 在oracle数据库中插入特殊字符
- excel-formula - 如何找到大于列中前一个值的列中的第一个值
- php - 管理 PHP 数组中字符串使用的内存的最佳方法是什么?