IdentityServer4 SPA Login
我想创建一个SPA,然后通过我的自定义登录屏幕登录(前端在React中
- 它说找不到URL,您是否检查了控制器,端点是否以api开头?请验证并返回。
-
如所示的要点,控制器具有[Route(" api / [controller]"))路由。要访问该方法,我还需要该方法的名称,所以它应该起作用?但是实际上并不重要,我输入哪种" URL"进行测试(如小写字母,删除登录名等),仍然不会工作。 PS:我分享了错误的代码库。现在的代码库(尤其是要点)是实际的。
在Config.cs上定义客户端时,将使用默认的CORS实现。定义客户端
时,您只需要将spa应用程序的origin添加到AllowedCorsOrigins
1 2 3 4 5 6 7 8 9 10 11
| new Client
{
...
AllowedCorsOrigins =
{
"http://localhost:5001"
},
...
}, |
注意http://localhost:5001是来源,http://localhost:5001/是url
编辑:
要在SPA应用程序上具有登录UI,还需要修改IdentityServer的Startup类以添加cors,这是详细信息:
将此代码添加到ConfigureServices方法中:
1 2 3 4 5 6 7 8 9
| services.AddCors(options => {
options.AddPolicy("default", policy =>
{
policy.WithOrigins("http://localhost:5001")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
}); |
并将此代码转换为Configure方法
- 我已根据您的建议更新了Config中的Client。 AuthenticateControler具有以下路由属性:[Route("api/[controller]")]。因为应该调用的方法是`Login([FromBody] LoginRequest request)`,所以我调用的完整端点是:https://localhost:5000/api/Authenticate/Login。但是,这将导致产生与以前相同的输出:对路径:/ api / Authenticate / Login从源:localhost:5001发出CORS请求,但由于路径不是允许的IdentityServer CORS端点而被忽略,您可以在Gist中看到更新以上提供。
-
我知道,您正在尝试对IdentityServer进行ajax调用。我在本地复制了您的问题,我们需要做的就是像对api客户端一样启用cors,这是在IdentityServer项目的Startup.cs上的ass代码:1.在ConfigureServices方法中添加services.AddCors(options => {options.AddPolicy("default", policy => { policy.WithOrigins("http://localhost:5001").AllowAnyHeader()??.AllowAnyMethod();})??;}); 。 2-在app.UseIdentityServer()之前的Configure方法上使用app.UseCors("default");-让我知道它是否有效,然后我将更新主要答案@Lenon
-
@Lenon不要忘记添加.AllowCredentials()来支持CSRF
-
我可以管理它。但是看来,自定义的ReturnUrlParser不能以这种方式工作……这很奇怪。
-
您是如何做到的?与建议的解决方案有什么不同?关于ReturnUrlParser的@Lenon,因为这行代码,例如您的UI不是本地的,要解决此问题,您可以添加自定义ReturnUrlParser并像这样注册它:services.AddTransient<IReturnUrlParser, SpaReturnUrlParser>();
-
允许使用多个Cors时,有些不可思议。从启动中删除它后,它就可以工作了。使用默认脚本,如图所示。是的,这很好。但是Response有点奇怪,因为它想要一个看起来像localhost:5002 / connect / authorize /…的返回URL。而且我没有绕过:)
-
自定义解析器应该可以在此处解决您的问题。结帐整个仓库,这是一个很好的例子
-
正是我设置的方式:)问题是,我直接调用它,但是ReturnUrl将被解析为null。使用getQueryVariable有点奇怪。
-
但是tbh Ia€?ll会尝试获得一种变通办法,并采用某种变通办法,以使其能够正常工作,而无需重定向到登录页面。
-
祝你好运,让我知道我能不能帮到我,现在更新我对cors的主要答案@Lenon
-
是的,会有一些...您可能会感到不和谐?聊天在这里不起作用.. :) @nahidf