【问题标题】:ADFS 4 authentication in .Net Core via UserName and Password通过用户名和密码在 .Net Core 中进行 ADFS 4 身份验证
【发布时间】:2020-12-23 21:44:03
【问题描述】:

我正在使用 .net 核心 API 应用程序,角度前端仅向我发送用户的用户名和密码(从登录页面获取)。 我的 API 应用程序必须请求对基于客户 Intranet 的 ADFS 4 服务进行身份验证。

问题是:如何调用发送用户名和密码的 ADFS 4 API 来验证用户身份?如果您有任何样品,那就太好了!

调用 ADFS 的目的只是为了查看用户是否被授权使用应用程序,Web 应用程序使用自己的 jwt 令牌来授权操作。

谢谢大家

【问题讨论】:

    标签: .net authentication .net-core adfs adfs4.0


    【解决方案1】:

    首先,您必须知道使用 REST Web API 访问 ADFS 4 最好在 OAuth2 之上使用 OpenIDConnect 实现,因为通过 ADFS 4 对 Web API 进行身份验证需要 OAuth2 进行授权。

    OAuth2 和 OpenIDConnect(通常称为 OIDConnect)是已知标准,尽管这些标准不要求将 JWT 作为授权令牌的一部分。 ADFS 自 ADFS 3 使用并需要 JWT 令牌用于 OAuth2,因此您已经更正了使用 JWT 作为令牌。

    自 ADFS 3 以来的 ADFS 完全支持 OAuth2/OIDC,这包括隐式授权、代码令牌以及您想要实现的具有用户名和密码的授权类型。

    作为身份验证的一部分传递用户名和密码的授权类型称为“资源所有者凭据”。不建议这样做,因为代码授权和隐式授权本质上不太安全。

    如果您想使用用户名和密码进行身份验证,那么您必须了解这意味着您不能对 Web API 使用推荐的身份验证/授权。对 Web API 使用代码授权类型是常见且最佳的做法。

    请参考ADFS官方文档供开发者参考: https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-openid-connect-oauth-flows-scenarios

    更新 1: 您正在询问要在控制器中放入什么。不,您不能将 OAuth 的身份验证和授权放在控制器中。 是的,您应该使用[Authorize] 属性标记控制器,但这只会将您的控制器类标记为Web API 需要获得授权。 OAuth 的真正授权代码始终设置在 Startup.cs 中的 ConfigureServices 方法中。

    如需更多示例,请查看 Microsoft 提供的 ASP.NET Core 中的 MS Identity 代码示例: https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2

    尤其是这个: https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/blob/master/1-WebApp-OIDC/1-1-MyOrg/Startup.cs#L24-#L47

    【讨论】:

    • 我想我没有很好地解释这个问题。我知道有不同类型的授权,但我真的不明白如何在 ADFS 4 中实现对身份验证的调用。例如:如果我调用一个 API,首先我必须知道 API 名称,然后我必须指定一些参数或标头,例如用户名或令牌。问题更像是:我必须在身份验证控制器中放入什么?
    猜你喜欢
    • 2013-10-15
    • 2018-12-19
    • 2012-11-15
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多