c# - 使用 pkce 保护 asp.net core 3.1 授权代码流
问题描述
您好,我有一个独立的无帐户 javascript 应用程序,我需要使用我的 .net core 3.1 api 进行一些 api 调用。保护应用程序和我的 api 的最佳方法是什么?经过一些研究,我读到如果我有一个 oauth 2.0 服务器,则 javascript 应用程序的最佳授权类型是使用 pkce 的授权代码流。对于无帐户的 javascript 应用程序,这种实现是否可行?谢谢
解决方案
使用从 Javascript 客户端创建的用于代码交换的动态证明密钥 (PKCE),而不是客户端密码。不要使用客户端密码。
创建一个长度在 43-128 个字符之间的随机字符串,然后生成字符串的 url-safe base64-encoded SHA256 hash。原始随机字符串称为 code_verifier,散列后的版本称为 code_challenge。
创建一个随机字符串(代码验证器),例如 5d2309e5bb73b864f989753887fe52f79ce5270395e25862da6940d5
创建 SHA256 哈希,然后对字符串进行 base64 编码(代码质询):MChCW5vD-3h03HMGFZYskOSTir7II_MMTb8a9rJNhnI
在最初的 Oauth2.0 请求中,通过 code_challenge 获取授权码。然后在用token交换授权码时,传递code_verifier。这确保了即使授权码被截获,“中间人”也无法将其换成令牌。请参阅下面的链接,了解如何实现相同的
https://aaronparecki.com/oauth-2-simplified/#single-page-apps https://developer.okta.com/blog/2019/05/01/is-the-oauth-implicit-flow-dead
推荐阅读
- sql - Impala SQL 将多个值合并为 1
- python - 将不同数据框中的数据添加到excel
- flutter - How To set input and output data string tensorflow lite in flutter
- mongodb - Spring data MongoDB change stream with multiple application instances
- reactjs - MUI v5:带有 StyledBadge 图标的 BottomNavigationAction?
- eclipse - Duplicate method in call() mcp
- python - 简单的 Python 摇滚,纸,剪刀游戏需要帮助
- mysql - Is this database schema for reservation and incidentals billings correct?
- java - 如何创建一个类的对象,其中构造函数将参数作为其他类的对象
- c# - 如何从响应标头中的内容类型中删除 charset=utf-8