首页 > 解决方案 > 使用 pkce 保护 asp.net core 3.1 授权代码流

问题描述

您好,我有一个独立的无帐户 javascript 应用程序,我需要使用我的 .net core 3.1 api 进行一些 api 调用。保护应用程序和我的 api 的最佳方法是什么?经过一些研究,我读到如果我有一个 oauth 2.0 服务器,则 javascript 应用程序的最佳授权类型是使用 pkce 的授权代码流。对于无帐户的 javascript 应用程序,这种实现是否可行?谢谢

标签: c#oauth-2.0oauthidentityserver4

解决方案


使用从 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


推荐阅读