从ASP.NET Core MVC项目提供Angular SPA时可以使用OIDC混合流吗?

时间:2019-06-17 12:31:10

标签: asp.net-mvc angular identityserver4

我有2个不同的.NET Core 2.2 MVC项目。我正在将IdentityServer4用于令牌服务器,将Azure B2C用于身份存储。

第一个MVC应用程序是普通的MVC应用程序,我已经将其完美地与OIDC混合流程配合使用。

第二个MVC应用程序是Angular 7 cli应用程序,它提供index.html 并包含该应用程序将调用的API。 Angular应用程序将直接调用任何其他API(网关模式)。

我的问题是关于第二个应用程序的-我正在尝试找出设置Angular应用程序安全性的最佳方法。

我的理解是:OIDC隐式流公开暴露了浏览器上的访问令牌。 OIDC混合流不会公开访问令牌(至少在访问同一台Web服务器时-没有CORS),因为Web服务器(客户端)使用反向通道通过授权代码获取访问令牌,并且从未公开浏览器。

问题1:我对内隐与混合的理解正确吗?

如果我的理解是正确的,我认为最好的方法甚至是针对Angular应用程序的Hybrid flow,但是我见过的将OIDC与Angular结合使用的大多数示例都涉及隐式流程,因此不要授权代码/反向渠道的优势。避免在浏览器上拥有访问令牌似乎是一件大事,这是一个值得实现的目标,但您想知道为什么它似乎没有做到吗?

问题2:我正在从MVC服务器提供Angular index.html-为什么我不能只使用Hybrid流来保护index.html页面,并将令牌保留在反向通道上?

告诉我我对这一切的理解还不完整...

1 个答案:

答案 0 :(得分:0)

您的理解是正确的。您可以保护自己的index.html。您将要面对的唯一问题是,它不是当今的默认配置。根据您的要求,很可能根本不需要任何oidc客户端库,您可以使用({same-site, http-only)cookie(不是承载令牌)保护您(仅)API,并在Angular防护中确保您仍然可以重新登录(如果没有,请通过本地MVC资源重定向,以将服务器端代码纳入登录过程)。

请参见this question,尤其是下面的评论和链接,以供进一步参考。