Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Azure Active Directory身份验证中,为什么使用授权代码流_C#_Azure - Fatal编程技术网

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

C# 在Azure Active Directory身份验证中,为什么使用授权代码流,c#,azure,C#,Azure,我正在从事一个.net MVC和web API项目,并使用active directory对API用户进行身份验证,在身份验证时,AD返回一个代码,我必须交换代码以获取令牌并使用该令牌调用API,问题是为什么返回代码,为什么我必须将其交换为令牌?我可以直接获得令牌吗?您的问题并不是针对Azure AD的,而是关于OAuth流以及为什么使用它的更多信息。 流程似乎有点复杂,是的,但它所做的一切都有其原因 我鼓励您使用授权代码流,而不是其他方法。 它有许多优点: 你的应用程序将永远看不到用户的密码

我正在从事一个.net MVC和web API项目,并使用active directory对API用户进行身份验证,在身份验证时,AD返回一个代码,我必须交换代码以获取令牌并使用该令牌调用API,问题是为什么返回代码,为什么我必须将其交换为令牌?我可以直接获得令牌吗?

您的问题并不是针对Azure AD的,而是关于OAuth流以及为什么使用它的更多信息。 流程似乎有点复杂,是的,但它所做的一切都有其原因

我鼓励您使用授权代码流,而不是其他方法。 它有许多优点:

  • 你的应用程序将永远看不到用户的密码
  • 用户无法查看应用程序的客户端机密
  • 用户看不到应用的访问令牌(中间人攻击者也看不到)
  • 您将获得一个刷新令牌,可以在需要时使用它来获取新令牌(不过您需要为此指定脱机访问范围)
  • 用户可以通过多因素身份验证、使用ADFS的联合身份验证等,而您的应用程序不需要关心这些
替代流动及其不利因素:

  • 隐式流
    • 直接向您提供令牌,无需代码交换
    • 没有刷新令牌
    • 主要用于单页应用程序,其中刷新使用隐藏的iframe完成,但这取决于用户的会话是否保持活动状态
    • 如果您在SPA之外使用此功能,则无法真正刷新令牌,需要用户每小时重新登录一次
    • 用户可以查看并获取应用程序的访问令牌
  • 客户端凭据流
    • 您不是以用户身份访问API,而是以应用程序本身的身份访问API
    • 有些API不支持这种方法,要求您代表用户进行调用
    • 这不允许您对用户进行身份验证
    • 使用此流程需要应用程序权限,这通常为整个组织提供非常广泛的访问权限
    • 这个流程的好处在于它非常简单
  • 资源所有者密码凭据流
    • 不要使用此流
    • 对具有app+用户凭据的令牌终结点的HTTP请求
    • 向您的应用公开用户密码(!)
    • 如果用户有MFA、密码过期等,则不工作

    • 这都是出于安全原因

      OAuth 2.0希望满足以下两个标准:

      • 并非所有开发人员都有启用SSL的服务器,您应该允许他们使用非HTTPS重定向URI
      • 您不希望黑客能够通过拦截请求来窃取访问/刷新令牌
      由于授权码授权具有为访问令牌交换授权码的额外步骤,因此它提供了隐式授权类型中不存在的额外安全层

      根据Nate Barbettini的说法,我们需要为访问令牌交换身份验证码的额外步骤,因为身份验证码可以在前通道中使用(不太安全),而访问令牌可以在后通道中使用(更安全)

      因此,安全性的好处是访问令牌不向浏览器公开,因此不能从浏览器截获/抓取。我们更信任web服务器,它通过后台通道进行通信。访问令牌是机密的,因此可以保留在web服务器上,而不会暴露给浏览器(即前端通道)

      有关更多信息,请观看此精彩视频:


      OAuth 2.0和OpenID Connect(纯英语)(开始26分钟)

      是的,还有一些其他身份验证协议,您可以在不交换代码的情况下直接调用令牌,或者用户交叉点就是其中之一。感谢您提供信息丰富的答案,这正是我所需要的!