【问题标题】:Secure asp.net core 3.1 authorization code flow with pkce使用 pkce 保护 asp.net core 3.1 授权代码流
【发布时间】:2021-05-17 22:06:32
【问题描述】:

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

【问题讨论】:

  • 如果您的客户端应用程序是无帐户的,则使用 OAuth 2.0 客户端凭据授予oauth.net/2/grant-types/client-credentials 更有意义
  • 不,这没有意义,因为凭据将在检查器中可见,因此没有理由这样做

标签: c# oauth-2.0 oauth identityserver4


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-04-29
    • 2021-08-03
    • 2019-11-01
    • 2021-04-12
    • 2021-05-08
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多