0

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

问题是:如何调用发送用户名和密码的 ADFS 4 API 对用户进行身份验证?如果你有任何样品,可能会很棒!

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

谢谢大家

4

1 回答 1

0

首先,您必须知道使用 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

于 2020-09-04T16:57:02.523 回答