C# 在Azure Active Directory身份验证中,为什么使用授权代码流
我正在从事一个.net MVC和web API项目,并使用active directory对API用户进行身份验证,在身份验证时,AD返回一个代码,我必须交换代码以获取令牌并使用该令牌调用API,问题是为什么返回代码,为什么我必须将其交换为令牌?我可以直接获得令牌吗?您的问题并不是针对Azure AD的,而是关于OAuth流以及为什么使用它的更多信息。 流程似乎有点复杂,是的,但它所做的一切都有其原因 我鼓励您使用授权代码流,而不是其他方法。 它有许多优点:C# 在Azure Active Directory身份验证中,为什么使用授权代码流,c#,azure,C#,Azure,我正在从事一个.net MVC和web API项目,并使用active directory对API用户进行身份验证,在身份验证时,AD返回一个代码,我必须交换代码以获取令牌并使用该令牌调用API,问题是为什么返回代码,为什么我必须将其交换为令牌?我可以直接获得令牌吗?您的问题并不是针对Azure AD的,而是关于OAuth流以及为什么使用它的更多信息。 流程似乎有点复杂,是的,但它所做的一切都有其原因 我鼓励您使用授权代码流,而不是其他方法。 它有许多优点: 你的应用程序将永远看不到用户的密码
- 你的应用程序将永远看不到用户的密码
- 用户无法查看应用程序的客户端机密
- 用户看不到应用的访问令牌(中间人攻击者也看不到)
- 您将获得一个刷新令牌,可以在需要时使用它来获取新令牌(不过您需要为此指定脱机访问范围)
- 用户可以通过多因素身份验证、使用ADFS的联合身份验证等,而您的应用程序不需要关心这些
- 隐式流
- 直接向您提供令牌,无需代码交换
- 没有刷新令牌
- 主要用于单页应用程序,其中刷新使用隐藏的iframe完成,但这取决于用户的会话是否保持活动状态
- 如果您在SPA之外使用此功能,则无法真正刷新令牌,需要用户每小时重新登录一次
- 用户可以查看并获取应用程序的访问令牌
- 客户端凭据流
- 您不是以用户身份访问API,而是以应用程序本身的身份访问API
- 有些API不支持这种方法,要求您代表用户进行调用
- 这不允许您对用户进行身份验证
- 使用此流程需要应用程序权限,这通常为整个组织提供非常广泛的访问权限
- 这个流程的好处在于它非常简单
- 资源所有者密码凭据流
- 不要使用此流
- 对具有app+用户凭据的令牌终结点的HTTP请求
- 向您的应用公开用户密码(!)
- 如果用户有MFA、密码过期等,则不工作
- 并非所有开发人员都有启用SSL的服务器,您应该允许他们使用非HTTPS重定向URI
- 您不希望黑客能够通过拦截请求来窃取访问/刷新令牌
- 这都是出于安全原因
OAuth 2.0希望满足以下两个标准:
OAuth 2.0和OpenID Connect(纯英语)(开始26分钟)是的,还有一些其他身份验证协议,您可以在不交换代码的情况下直接调用令牌,或者用户交叉点就是其中之一。感谢您提供信息丰富的答案,这正是我所需要的!