C# 带有React应用程序的ASP.NET标识在OAuth2回调上中断
我使用创建了一个已安装的web应用程序。React应用程序负责所有用户交互,dotnet应用程序仅用作API。我使用Microsoft.AspNetCore.authentication提供的C# 带有React应用程序的ASP.NET标识在OAuth2回调上中断,c#,reactjs,asp.net-core,asp.net-identity,C#,Reactjs,Asp.net Core,Asp.net Identity,我使用创建了一个已安装的web应用程序。React应用程序负责所有用户交互,dotnet应用程序仅用作API。我使用Microsoft.AspNetCore.authentication提供的services.AddAuthentication().AddGooglebuilder扩展集成了Google OAuth2身份验证选项。最后,整个过程被容器化并部署到Azure上的Linux应用程序服务中 我的大部分代码都是从以前的版本移植过来的,这是一个非常类似的设置,但在这种情况下,我将自定义Rea
services.AddAuthentication().AddGoogle
builder扩展集成了Google OAuth2身份验证选项。最后,整个过程被容器化并部署到Azure上的Linux应用程序服务中
我的大部分代码都是从以前的版本移植过来的,这是一个非常类似的设置,但在这种情况下,我将自定义React应用程序添加到现有的ASP.NET应用程序中,而不是从dotnet的官方React项目模板开始。当时一切都很顺利。但我在部署到Azure时面临新版本的问题。这里有一个提琴手跟踪来突出问题:
vault2
是身份识别服务的客户端identity azure
是identity Server应用程序。此跟踪显示的流程如下所示:
https://identity-azure..com/signin-google?state=...
)service worker.js
),它们显然是从React应用程序发出的。因此,登录google
路径是由浏览器的缓存React应用程序而不是服务器处理的。React应用程序使用React router redux
在客户端处理某些路由,当然signin google
不是其中之一,因此它似乎返回了一个空组件
据我所知,我的所有ASP.NET路由(使用Route
属性来修饰控制器操作方法实现)都由服务器一致地处理。然而,signin google
路由是在身份验证中间件中实现的,据我所知,除了更改路径之外,我对它没有太多控制权。我能做些什么来强制服务器端处理这个问题吗
我应该补充一点,这种行为相当不稳定。似乎如果我的Google帐户已签出,则会观察到上述情况,但如果我的帐户已签入,则登录Google将返回预期的302状态代码,OAuth2流将成功继续 我终于弄明白发生了什么事。至少,我想我有。我不能确定,因为我已经将React UI分解成一个完全独立的应用程序,但我在那里观察到了类似的模式。我原来的问题中甚至有一条线索!事实证明,断页实际上是由React应用程序的服务人员提供的。我发现了这一点,因为即使在将React应用程序拆分为自己的域后,我的
identity azure
域仍然是一个纯ASP.NET Web API,在identity azure
下请求某些URL的行为仍然相同,我最终注意到它们在我浏览器的网络选项卡上报告自己由ServiceWorker
提供服务。下面的例子
我一清除浏览器应用程序缓存(在Windows上的Chrome中,这是F12>应用程序>清除存储>清除站点数据
,并选中注销服务人员
)
如果我将React应用程序保留在与ASP.NET后端相同的解决方案中,我无法100%确定解决方案是什么,但我认为这可能会涉及。我希望这对将来的人有所帮助
顺便说一下,如果您正在考虑为Identity Server 4构建一个完全解耦的UI,那么有一个。是什么让您认为React是以某种方式处理对不同子域的调用的?不是。
signin google
是Identity azure
子域上的回调URN。它是ASP.NET的google OA的默认回调路径uth集成。为清晰起见,vault2
也是一个React应用程序,但该应用程序按预期工作。