是否建议使用Open ID Connect直接保护Web API?设置:
- 移动应用程序
- 授权服务器(ADFS 4.0)
- Web API(ASP.NET核心)
目前我做普通的OAuth2"授权代码流",然后在HTTP头中将access_Code作为"授权:承载"传递给我的Web API。在ASP.NET核心中,我只做通常的操作服务。AddAuthentication(…)。AddJwtBearer(…)工作良好。
但每个人都说OAuth2只是"伪身份验证",存在某些缺陷。我希望我的用户在使用我的Web API之前经过正确的身份验证。因此,开放身份连接似乎应该是一种方式,也就是"真正的身份验证"。
但是,在ASP.NET Core Web API中"使用"Open ID Connect身份验证确实有效吗?如果是,怎么做?这是一种好的做法吗?所有的示例似乎都是关于网站的,而不是Web API。
有一个扩展方法服务。AddAuthentication(…).AddOpenIdConnect()
但在asp.net WEB API中实现OpenID连接Authetition,他们声明"该组件是为用户交互客户端设计的"。
我也不明白的是,我会如何处理从Open id connect获得的"id_token"。目前我只是通过"access_token"作为Bearer。如何使用id_token?
一些澄清:
- API不代表用户行事(访问公司数据)
- API已经有权访问"数据"。它本身不需要任何身份验证工作流,也不需要传递用户凭据
- API需要知道用户是"世界卫生组织",必须以现代和良好的方式进行
- 这就是为什么我想到OICD的"真实身份验证"(VS Oauth2只是"伪")
我基本上无法理解从OICD(id_token)返回的东西将如何传递到我的Web API。
OIDC是一个OAuth工作流。它只是扩展了OAuth;它不能取代它。API通常通过令牌或客户端机密进行授权。区别仅仅在于它是否代表特定用户行事。例如,像Facebook API这样的东西,其API有两个工作流,你通常使用Facebook的API作为客户端应用程序,使用你的应用程序的应用程序id和客户端机密,或者你可以做用户特定的事情,比如在用户墙上创建一个帖子,并获得授权令牌。
该授权令牌几乎总是来自OAuth工作流。考虑到您所述的设置,您的移动应用程序将处理此问题,以便从ADFS服务器为用户获取身份验证令牌。同时,您的API实际上很可能同时做这两件事。如果移动应用程序为它提供了一个客户端密钥和用户身份验证令牌,那么它将使用分配的客户端密钥和该令牌进行通信。