c# - 在 Azure Active Directory 身份验证中为什么使用授权代码流

标签 c# azure

我正在开发一个 .net MVC 和 Web API 项目,并使用 Active Directory 对 API 用户进行身份验证,在身份验证时,从 AD 返回代码,我必须交换代码才能获取 token 并使用该 token 调用API,问题是为什么会返回code,为什么我必须用它来交换token?我可以直接获得 token 吗?

最佳答案

这都是出于安全原因。

OAuth 2.0 希望满足这两个标准:

  • 所有开发者都不会拥有启用 SSL 的服务器,您应该允许他们使用非 HTTPS 重定向 URI
  • 您不希望黑客能够通过拦截请求来窃取访问/刷新 token 。

由于授权代码授予具有将授权代码交换为访问 token 的额外步骤,因此它提供了隐式授予类型中不存在的附加安全层。

根据 Nate Barbettini 的说法,我们需要将身份验证代码交换为访问 token 的额外步骤,因为身份验证代码可以在前 channel 中使用(安全性较低),而访问 token 可以在后 channel 中使用(更安全)。

因此,安全优势在于访问 token 不会暴露给浏览器,因此无法从浏览器拦截/抓取。我们更信任通过反向 channel 进行通信的 Web 服务器。然后, secret 的访问 token 可以保留在 Web 服务器上,并且不会暴露给浏览器(即前端 channel )。

有关更多信息,请观看这​​段精彩的视频:

OAuth 2.0 和 OpenID Connect(简单英语)https://youtu.be/996OiexHze0?t=26m30s (开始 26 分钟)

关于c# - 在 Azure Active Directory 身份验证中为什么使用授权代码流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60986622/

相关文章:

c# - Azure 网站 - 502 - Web 服务器在充当网关或代理服务器时收到无效响应

azure - 流分析查询联合

azure - 使用 nuget 恢复最新版本在 DevOps 管道中构建问题

c# - 从 NSIS 安装程序运行应用程序时,File.Exists 不起作用

c# - 如何修复捕获TimeoutException?

c# - 如何在 linq 列表中分组并在 C# linq 中连接一些字符串

azure - 使用 Azure Key Vault 获取 secret

Azure Pipeline Matrix策略变量扩展问题与模板结合使用

c# - 集合在循环期间被修改,当它不可能是 C#

c# - 低优先级的线程阻止其他具有正常优先级的线程执行