Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# Identity server正在显示“持续”;显示登录:用户未通过身份验证”;在/connect/authorize/callback中_C#_Asp.net Core_Oauth 2.0_Openid_Identityserver4 - Fatal编程技术网

C# Identity server正在显示“持续”;显示登录:用户未通过身份验证”;在/connect/authorize/callback中

C# Identity server正在显示“持续”;显示登录:用户未通过身份验证”;在/connect/authorize/callback中,c#,asp.net-core,oauth-2.0,openid,identityserver4,C#,Asp.net Core,Oauth 2.0,Openid,Identityserver4,使用IdentityServer 4,我正在现有系统上实现代码流授权,该系统只支持IdentityServer中的ResourceOwnerPassword授权类型,并且运行良好 我进入了一个阶段,用户被提升为进行身份验证,然后重定向到服务器连接/授权/回调 之后,它将不进行身份验证并返回登录页面。从日志中,我得到以下信息: 调用IdentityServer终结点:IdentityServer 4.Endpoints.AuthorizationCallbackEndpoint for/conn

使用IdentityServer 4,我正在现有系统上实现代码流授权,该系统只支持IdentityServer中的ResourceOwnerPassword授权类型,并且运行良好

我进入了一个阶段,用户被提升为进行身份验证,然后重定向到
服务器连接/授权/回调

之后,它将不进行身份验证并返回登录页面。从日志中,我得到以下信息:

  • 调用IdentityServer终结点:IdentityServer 4.Endpoints.AuthorizationCallbackEndpoint for/connect/Authorization/callback

  • 验证授权请求

    {
    "ClientId": "demo",
    "ClientName": "MVC Client Demo",
    "RedirectUri": "http://localhost:5002/signin-oidc",
    "AllowedRedirectUris": ["http://openidclientdemo.com:8001/signin-oidc",
    "http://localhost:5002/signin-oidc"],
    "SubjectId": "anonymous",
    "ResponseType": "code id_token",
    "ResponseMode": "form_post",
    "GrantType": "hybrid",
    "RequestedScopes": "openid profile default-api",
    "State": "CfDJ8DU4Xalc7d9HttaFlZ-UaDhGsjeeEccTfNiNZFz3yYZI9MfXjrXo2TAzT9f6-F2VEdC7bWtcD7HRJgkqrh4t0oTAe_47IBfcm5Fsde9bVRorq-CHcL6_c15Vz1G5LJyEzqX6tyjhcZ2g3J2JjxD1PME1W7sq9YSddhQUJmxt4bVi70wdTtXXp0tH0SKyb0vLCs3eIjOln792nobaFOCM7r3VJ8BfXfpDm2pOOmBlR7zCCBxFCivwj7Zmy5Tu8Z09MvzOaLEkPBSL5i9GyxmGiB0P6osBPYEDyoRfgy2qDigH3QqLmLYjfE6NrgcgIGO9kgXuUT52XgALV_ZKjNbih-Y",
    "Nonce": "636702233595840569.NGQ3NGVlODMtYTVhNy00MjM4LWFhNGQtNTFiZTE3ZjllZmUzNjU5MGNmNjktNjg3Yy00YmZlLWEwYWYtYmMzM2QxZmZlNjBk",
    "Raw": {
        "client_id": "demo",
        "redirect_uri": "http://localhost:5002/signin-oidc",
        "response_type": "code id_token",
        "scope": "openid profile default-api",
        "response_mode": "form_post",
        "nonce": "636702233595840569.NGQ3NGVlODMtYTVhNy00MjM4LWFhNGQtNTFiZTE3ZjllZmUzNjU5MGNmNjktNjg3Yy00YmZlLWEwYWYtYmMzM2QxZmZlNjBk",
        "state": "CfDJ8DU4Xalc7d9HttaFlZ-UaDhGsjeeEccTfNiNZFz3yYZI9MfXjrXo2TAzT9f6-F2VEdC7bWtcD7HRJgkqrh4t0oTAe_47IBfcm5Fsde9bVRorq-CHcL6_c15Vz1G5LJyEzqX6tyjhcZ2g3J2JjxD1PME1W7sq9YSddhQUJmxt4bVi70wdTtXXp0tH0SKyb0vLCs3eIjOln792nobaFOCM7r3VJ8BfXfpDm2pOOmBlR7zCCBxFCivwj7Zmy5Tu8Z09MvzOaLEkPBSL5i9GyxmGiB0P6osBPYEDyoRfgy2qDigH3QqLmLYjfE6NrgcgIGO9kgXuUT52XgALV_ZKjNbih-Y",
        "x-client-SKU": "ID_NET",
        "x-client-ver": "2.1.4.0",
        "accessToken": "4155a526-2bb1-4d88-ba3a-21cb3a91f266",
        "userId": "MQ=="
    }
    
    }

  • 显示登录:用户未通过身份验证



  • 我不清楚身份验证失败的原因,知道吗?

    TL;DR:使用http+chrome的默认标识服务器无法工作。Chrome强制要求具有
    SameSite=none
    的cookie也具有
    Secure
    属性,因此您可能必须使用HTTPS,或者使用修改cookie策略

    关于单点登录和Cookie的一些背景知识

    cookie是服务器在
    响应中发送的一段信息,浏览器在随后的每个
    请求中发回

    当您登录到identityserver时,它会发回多个cookie,其中一个cookie标识您的会话。发送此cookie时带有属性
    SameSite=none
    ,这允许您浏览的任何应用程序向您的identityserver发出请求,并将此cookie包含在其中。这样,对
    /connect/authorize
    的调用包含此cookie,identityserver跳过登录部分。瞧

    您使用的是
    谷歌浏览器吗?

    Google Chrome最近引入了一项变更,即所有带有属性
    SameSite=none
    的cookie必须包含
    Secure
    属性。

    这两个属性意味着:

    • :控制浏览器在将cookie附加到向您的站点发出的任何请求时的行为方式(基于源)

      • SameSite=strict
        :不发送来自不同于源站点的请求的cookie。这有助于防止攻击
      • SameSite=lax
        :类似于
        strict
        ,但当用户通过单击链接或发送表单有意启动请求时,会发送cookie。未在脚本启动的请求上发送
      • SameSite=none
        :cookies将被包括在内,无论它们来自哪个来源
    • :表示cookie只能通过HTTPS发送

    IdentityServer使用
    SameSite=none
    发布这些cookie。这意味着,当您在本地提供不带HTTPS的IdentityServer,并且使用chrome作为浏览器时,它不会让您登录,因为在您向服务器发布您的用户和密码后,响应将包括会话cookie,但您的浏览器(chrome)会拒绝它,因为它们没有标记为
    安全
    ,但是,标记为
    SameSite=none

    原因由解释,正确的解决方案是使用HTTPS

    无论如何,您可以通过设置更改
    SameSite

    将其设置为
    SameSiteMode.Lax
    至少可以强制使用
    SameSite=Lax

    app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.Lax });
    

    从log@Tseng也不例外!或者至少不显示在日志中,你确定吗?IdSrv4应记录一个错误或异常,并提供身份验证请求失败的更多信息可能未映射所需的声明,并且通过路由,用户最终会进入登录页面。你想让用户进入的页面是否受到特定策略角色的保护?@Tseng No erro,非常肯定。虽然我将标志
    IdentityModelEventSource.ShowPII
    设置为true,但如果您在本地开发中使用http重定向,则会导致这种情况。客户端web和ID服务器都必须是https。尝试一下。是否可以更改IdentityServer中的SameSite cookie行为?我会将SameSite设置为Lax或Strict。谢谢,通过设置我在这个问题上花费的时间,我成功地将SameSite设置为Lax!阅读这篇文章的第一句话修复了我的问题!谢谢你!!!