我正在构建一个网络应用程序
- Asp.net Core 2.0 Web API
- AngularJS 4+
- SQL Server
- 用户只能通过 Google/Facebook/LinkedIn 注册/登录。我将从他们那里收到的用户信息(例如姓名和电子邮件)保存到 SQL 数据库表中。我没有计划在我的网站上提供使用电子邮件和密码的手动注册。我不想维护用户凭据、忘记密码、保护用户密码以及所有相关的细节。
到目前为止,还没有构建移动应用程序的计划。我正在学习 .Net Core,并偶然发现 IdentityServer4 作为在 asp.net core 应用程序中提供身份的推荐方法。我浏览了所有文档、示例并尝试了一些示例应用程序。我想我很清楚identityserver的配置和工作流程。
我的问题是
- 由于我的身份只是外部提供商,是否值得在我的架构中使用 IdentityServer4?我正在考虑使用默认的 Asp.net Identity 和 .AddCookie()、.AddGoogle() 和 .AddJwtBearer() 从 Google/Facebook/LinkedIn 检索 cookie,使用 AddGoogle AddFacebook AddLinkedIn 中间件来处理回调、提取 Claimprincipal 并设置 Jwt Angular JS 应用程序在其 XMLHttp 请求中使用的 token 。
- 除了单一身份最佳实践之外,我将这项工作外包给 IdentityServer4 还能获得哪些好处?
感谢您对此提出的或大或小的反馈。
最佳答案
IdentityServer 非常适合处理访问许多 protected 资源的许多客户端。您似乎只有一个客户端(所谓的 AngularJS 4+ 应用程序)和一种资源,即 Asp.net Core 2.0 Web API。
需要澄清的是,您不需要 ASP.NET Identity 以及 Google、LinkedIn 等的所有中间件。如果您的客户端确实是 Angular javascript 应用程序,那么它不需要像 ASP 这样的服务器端组件.NET Core - 它只是一个浏览器应用程序。您可以使用 oidc-client 等 javascript 库,并根据自己的需要配置外部身份验证提供程序。您将收到一个 id_token 和/或 access_token 来存储在浏览器中并最终传递到您的 Api 资源。
说到您的 Api 资源,此应用程序可以直接与 token 发行者进行验证,无论是 Google 还是 Facebook 或其他任何人。
因此,通过此设置:(a) 浏览器应用程序 (Angular)、(b) 服务器 WebApi (ASP.NET CORE) 和 (c) 身份/访问控制服务(Google、Facebook 等)您当然不需要任何运行 ASP.NET Identity 或 IdentityServer4 的其他应用程序。似乎没有它们会更容易。
如果您的 Angular 应用实际上位于 ASP.NET MVC 中,那么情况也是如此。
如果您的 Angular 应用和 WebApi 都属于一个 ASP.NET 项目,那么情况也是如此,您所需要的只是一个身份提供程序来返回 id_token。
关于angularjs - 是否使用 IdentiyServer 仅用于带有 ASP.NET Core 的外部登录提供商 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46449615/