在单独的IdentityServer应用程序中集中身份验证,但使用资源所有者密码流

时间:2017-06-28 02:34:04

标签: angular jwt identityserver4 asp.net-core-webapi azure-web-app-service

我正在使用.NET Core 1.1 REST后端处理两个Angular 2应用程序并在Azure App Service上托管。我希望他们能够共享身份验证信息,这样您就不需要登录两次(实际上是SSO)。我还希望使用OAuth / OpenID Connect与第三方提供商集成,但也可以选择创建帐户。理想情况下,我希望两个应用程序在不去第三方提供商时使用本机登录/密码GUI(不会重定向到其他服务)。

为了支持上述所有内容并轻松扩展(不维护服务器端会话),我相信我想使用来自SPA的JWT承载认证。 IdentityServer4似乎符合要求,我甚至可以创建第三个应用程序来托管它,这样我就可以在两个面向公众的应用程序之间共享。资源所有者密码流将允许我使用本机GUI。

我遇到问题的地方是如何处理第三方提供商。如果我使用资源所有者流,则不会直接从浏览器访问共享的IdentityServer4应用程序,因此我似乎需要在两个SPA中实现OAuth / OpenID Connect。是避免在两个SPA应用程序上实现此逻辑以使用重定向到共享IdentityServer4 GUI的其他流程之一的唯一方法吗?换句话说,使用资源所有者密码流,我仍然可以让IdentityServer4以某种方式处理第三方认证吗?

1 个答案:

答案 0 :(得分:0)

资源所有者流程不会为您提供SSO,因为它是一个RESTful浏览器流程(即您可以使用任何HTTP客户端执行此操作)。基本上,由于这个原因,你无法通过IdentityServer4发布会话。只有像Implicit flow这样的东西才能提供这种功能,原因是隐式流只能通过各种浏览器完成,这意味着IdentityServer4可以向浏览器发出会话。在您需要SSO时,永远不应将资源所有者视为要使用的流。如果您使用Implicit流程,那么您所有的问题都是可能的,甚至还有大量官方IdentityServer4示例代码可以帮助您解决问题。