Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法读取requestbody-identityserver回调url_C#_Asp.net Core_Identityserver4_Openid Connect_Asp.net Core 2.1 - Fatal编程技术网

C# 无法读取requestbody-identityserver回调url

C# 无法读取requestbody-identityserver回调url,c#,asp.net-core,identityserver4,openid-connect,asp.net-core-2.1,C#,Asp.net Core,Identityserver4,Openid Connect,Asp.net Core 2.1,对于我的后端,我只希望允许通过“秘密”url访问登录页面,否则只需将用户重定向到webui应用程序。 为此,我创建了以下中间件和实现 中间件 启动 它没有遇到任何断点,所以我使用fiddler进行了一些进一步的调试。 以下是从IDServer返回的原始输出 HTTP/1.1 200 OK Date: Fri, 12 Jul 2019 15:32:53 GMT Content-Type: text/html; charset=UTF-8 Server: Kestrel Cache-Control:

对于我的后端,我只希望允许通过“秘密”url访问登录页面,否则只需将用户重定向到webui应用程序。 为此,我创建了以下中间件和实现

中间件

启动

它没有遇到任何断点,所以我使用fiddler进行了一些进一步的调试。 以下是从IDServer返回的原始输出

HTTP/1.1 200 OK
Date: Fri, 12 Jul 2019 15:32:53 GMT
Content-Type: text/html; charset=UTF-8
Server: Kestrel
Cache-Control: no-store, no-cache, max-age=0
Pragma: no-cache
Transfer-Encoding: chunked
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: .AspNetCore.Identity.Application=long string.. path=/; httponly
Content-Security-Policy: default-src 'none'; script-src 'sha256-orD0/VhH8hLqrLxKHD/HUEMdwqX6/0ve7c5hspX5VJ8='
X-Content-Security-Policy: default-src 'none'; script-src 'sha256-orD0/VhH8hLqrLxKHD/HUEMdwqX6/0ve7c5hspX5VJ8='
Referrer-Policy: no-referrer

6bf
<html><head><base target='_self'/></head><body><form method='post' action='http://localhost:4444/signin-oidc'><input type='hidden' name='code' value='dda3afcefd7609714c85a49723904d7b8e6bdd3063980e6fd472231cce3ccfc8' />
<input type='hidden' name='id_token' value='eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk4NDM3OUUyM0Y4MTdBMkQ1RDhGMjIwMDNGQTU5RUUyQjVFMkU1MjQiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJtRU41NGotQmVpMWRqeUlBUDZXZTRyWGk1U1EifQ.eyJuYmYiOjE1NjI5NDU1NzMsImV4cCI6MTU2Mjk0NTg3MywiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiYXVkIjoiZmVsZm9yZ2UuY29yZSIsIm5vbmNlIjoiNTUwN2EyM2ZiYTUzNDdmZDg4NzNiZDkyMTM1NzQwYTEiLCJpYXQiOjE1NjI5NDU1NzMsImNfaGFzaCI6IjZlRmVpclktSG80NjR0c2ZkRGdKRnciLCJzaWQiOiIyYTdmYzk0YmE2MTM4Mjc4ZmM0YmNmYzgwYWJjOTRlMCIsInN1YiI6ImZkNWEyZjVkLWRiY2YtNGZmMS1iYmQxLTI3ZjIwMDc0YmY4NiIsImF1dGhfdGltZSI6MTU2Mjk0NTU3MywiaWRwIjoibG9jYWwiLCJyb2xlIjpbIkFkbWluaXN0cmF0b3IiLCJGZWxmb3JnZVVzZXIiLCJGZWxmb3JnZUFkbWluaXN0cmF0b3IiXSwiYW1yIjpbInB3ZCJdfQ.l4wwJHndOaeLxQp_v7bYsoHXMbCAxjYvtCO2JT3mzfMJ6P-NSLbjI9A6yV0eO34fUwKI4uFz9TS5MYsugCS-GTT2vPSqA4uGrZsUu4QJcPsJeI9v1ljOkEC2oB-opsXWxbNvFNiXn7oMx0HUlC74gZile5eb8bc6M0qcFWAjZ5bMfiwIVwB3PSdGya7ZVPb523CgjU3nTEApS4XXEoQOdGJ0L2HU_taHcZJC8k2xUimPya2RqQbokDCfkQBPuynHhHcX661sJblGyTukxKKZO_pTESRUay1UWmnoyNy2bQXjZemTBLaNaATKPOAuHLdPT7cGnhqAeVb3l1ivo_rvWw' />
<input type='hidden' name='scope' value='openid profile roles offline_access' />
<input type='hidden' name='state' value='2c2518ebcbd540c9bfa567264a372754' />
<input type='hidden' name='session_state' value='FWpR9DfCVp2ggyGN9L-HX5sAxTpmWIxlKk9qZE5IDSw.30c9a96a37ef1dec9b19e44aba11b114' />
<noscript><button>Click to continue</button></noscript></form> 
<script>window.addEventListener('load', function() 
{document.forms[0].submit();});</script></body></html>
0
HTTP/1.1200正常
日期:2019年7月12日星期五15:32:53 GMT
内容类型:text/html;字符集=UTF-8
服务员:红隼
缓存控制:无存储,无缓存,最大年龄=0
Pragma:没有缓存
传输编码:分块
到期时间:1970年1月1日星期四格林威治标准时间00:00:00
设置Cookie:.AspNetCore.Identity.Application=长字符串。。路径=/;httponly
内容安全策略:默认src“无”;脚本src'sha256-orD0/VhH8hLqrLxKHD/HUEMdwqX6/0ve7c5hspX5VJ8='
X-Content-Security-Policy:默认src'none';脚本src'sha256-orD0/VhH8hLqrLxKHD/HUEMdwqX6/0ve7c5hspX5VJ8='
推荐人政策:无推荐人
6bf
单击以继续
addEventListener('load',function())
{document.forms[0].submit();});
0
我有一个分支使用标准设置,只需点击[Authorize]属性,响应看起来类似,应用程序处理响应

所以我猜启动程序(或中间件?)无法解析原始请求体?
我错过了什么?如何实现此流程

好的,我认为中间件对于您想要实现的目标来说可能有点太复杂了

与其让中间件检查大量内容,不如创建一个基本url来捕获所有未配置的路由:

public class CatchAllController : Controller
{
    [Route("{*url}", Order = 999)]
    public IActionResult CatchAll()
    {
        return RedirectPermanent("http://localhost:5555");
    }
}
Order=999
确保它是API尝试解析的最后一个url选项。在此之前,它将解析特定于IdSvr4的url和您的
秘密url

另一件事是IdSvr4的配置。您有指向许多不同地方当局和服务器的指针(我不知道是什么):

options.Authority=”http://localhost:5000";

我认为您可能会从以下快速入门指南中获益:


也许可以尝试从这些示例中的一个设置服务器。

好的,因此我认为中间件对于您试图实现的目标来说可能有点太复杂了

与其让中间件检查大量内容,不如创建一个基本url来捕获所有未配置的路由:

public class CatchAllController : Controller
{
    [Route("{*url}", Order = 999)]
    public IActionResult CatchAll()
    {
        return RedirectPermanent("http://localhost:5555");
    }
}
Order=999
确保它是API尝试解析的最后一个url选项。在此之前,它将解析特定于IdSvr4的url和您的
秘密url

另一件事是IdSvr4的配置。您有指向许多不同地方当局和服务器的指针(我不知道是什么):

options.Authority=”http://localhost:5000";

我认为您可能会从以下快速入门指南中获益:


或者尝试从这些示例中的一个设置服务器。

为什么不使用OnRedirectToIdentityProvider事件

.AddOpenIdConnect("oidc", "Open Id connect", options =>
{
    // This event is fired when the user is about to be redirected to the login page.
    options.Events.OnRedirectToIdentityProvider = context =>
    {
        var validUrl = context.Request.Path.StartsWithSegments(new PathString("/secreturl"));                
        if (!validUrl)
        {
            context.Response.Redirect("http://localhost:5555");                            
            context.HandleResponse();
        }
        return Task.CompletedTask;
    };

为什么不使用OnRedirectToIdentityProvider事件

.AddOpenIdConnect("oidc", "Open Id connect", options =>
{
    // This event is fired when the user is about to be redirected to the login page.
    options.Events.OnRedirectToIdentityProvider = context =>
    {
        var validUrl = context.Request.Path.StartsWithSegments(new PathString("/secreturl"));                
        if (!validUrl)
        {
            context.Response.Redirect("http://localhost:5555");                            
            context.HandleResponse();
        }
        return Task.CompletedTask;
    };

这肯定是一个更简单的方法。。但这会重定向所有内容,跳过我所有的激励路由配置?这肯定是一个更简单的方法。。但这会重定向所有内容,跳过我所有的兴奋路线配置?效果很好。机密url转到idserver,所有控制器转到:5555。但是404不要重定向到:5555但是404页面也有一个快速修复程序吗?:)404不会命中此事件,但在启动时。配置您可以设置异常处理程序,例如:
app.UseExceptionHandler(“/home/error”)。错误设置重定向到
localhost:5555
。这就是我想到的,但我相信还有更好的方法。我得等明天,但为我省了一个晚上的睡眠,干杯:)或者更好:
app.UseStatusCodePagesWithRedirects(“http://localhost:5555");工作得很好。机密url转到idserver,所有控制器转到:5555。但是404不要重定向到:5555但是404页面也有一个快速修复程序吗?:)404不会命中此事件,但在启动时。配置您可以设置异常处理程序,例如:
app.UseExceptionHandler(“/home/error”)。错误设置重定向到
localhost:5555
。这就是我想到的,但我相信还有更好的方法。我得等明天,但为我省了一个晚上的睡眠,干杯:)或者更好:
app.UseStatusCodePagesWithRedirects(“http://localhost:5555");
public class CatchAllController : Controller
{
    [Route("{*url}", Order = 999)]
    public IActionResult CatchAll()
    {
        return RedirectPermanent("http://localhost:5555");
    }
}
.AddOpenIdConnect("oidc", "Open Id connect", options =>
{
    // This event is fired when the user is about to be redirected to the login page.
    options.Events.OnRedirectToIdentityProvider = context =>
    {
        var validUrl = context.Request.Path.StartsWithSegments(new PathString("/secreturl"));                
        if (!validUrl)
        {
            context.Response.Redirect("http://localhost:5555");                            
            context.HandleResponse();
        }
        return Task.CompletedTask;
    };