我正在开发asp.net Core2.2中的一个网络应用程序。Web API为来自Web应用程序的每个请求提供服务。我在Web API中使用JWT令牌身份验证。该令牌包含在来自web应用程序的每个请求中。
Web应用-> Web API ->数据层-> EF核心->DB
在登录过程中,用户在web界面上输入电子邮件和密码,然后点击登录按钮。请求发送到Web API,而不是从所有其他层传递到DB。如果用户是有效的,那么在Web API中会生成一个令牌,并在响应中将其传递给Web App。现在,在从Web App到Web API的每一次请求中,Web-APP都会在报头中发送此令牌。
现在,我想添加一个像Google这样的外部身份验证提供者。问题是我不确定如何处理我的应用程序的流程?因为Google身份验证只针对web应用程序,并不影响Web API的功能。
有什么建议吗?
发布于 2019-07-06 06:30:03
您需要做的是将用户身份验证委托给外部身份提供商(IdP)。在登录屏幕中,您通常会允许用户选择使用电子邮件/密码或外部IdP (例如谷歌、脸书等)。如果用户选择后者,“身份验证”步骤将由IdP负责,然后HTTP重定向到您(到您定义的URL )以及一个经过数字签名的ID令牌,该令牌包含一些用户信息(姓名、电子邮件等)
在这种情况下,应用程序流的更改如下所示:
Web APP -----> Web API ----> Data Layer----> EF Core ---->DB
| ^
v |
Identity Provider (e.g. Google)请注意,往返于IdP的重定向通常基于HTTP重定向。在简单的名义情况下,您不需要从Web API层调用IdP,尽管您必须将每个受支持的API定义为ID令牌的可信颁发者(签名验证所必需的)
分步说明通常由IdP,r.f.提供。Google Sign-In和Facebook login
发布于 2019-07-08 16:17:16
我建议您使用Identity Server4作为身份提供者。
您的web api将是一个受身份服务器保护的资源。在您的客户端应用程序中,当启动认证过程时,根据认证流程,用户将被重定向到identity server进行认证,用户可以通过Google认证选择本地数据库用户登录或外部登录。如果用户选择本地数据库,则用户将在identity server登录页上输入其凭据,并在本地数据库中验证该凭据。如果凭据正确,则身份服务器将发出令牌,并将令牌重定向回客户端应用程序。如果用户选择外部登录,用户将被重定向到Google登录页面进行登录,身份服务器将在从Google重定向后发出token (从Google发布的token获取声明),并使用token重定向回客户端应用程序。
在认证过程中,客户端可以设置自己想要访问的api资源,在用户同意访问该api资源(您的web api )后,颁发的访问令牌即可用于访问您的web api。
身份服务器文档:http://docs.identityserver.io/en/latest & Code samples。
https://stackoverflow.com/questions/56901959
复制相似问题