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
Asp.net core Identity Server 4/connect/endsession失败“;您正在查找的资源已被删除……”; 使用Identity Server 4 Asp.Net核心MVC客户端成功登录_Asp.net Core_Asp.net Identity_Identityserver4_Openid Connect - Fatal编程技术网

Asp.net core Identity Server 4/connect/endsession失败“;您正在查找的资源已被删除……”; 使用Identity Server 4 Asp.Net核心MVC客户端成功登录

Asp.net core Identity Server 4/connect/endsession失败“;您正在查找的资源已被删除……”; 使用Identity Server 4 Asp.Net核心MVC客户端成功登录,asp.net-core,asp.net-identity,identityserver4,openid-connect,Asp.net Core,Asp.net Identity,Identityserver4,Openid Connect,从客户端注销时,url上出现错误。。。。(下面列出了完整的url) “您正在查找的资源已被删除、名称已更改或暂时不可用。” AccountController.注销呼叫 await HttpContext.SignOutAsync("Cookies"); await HttpContext.SignOutAsync("oidc"); 浏览器中的Url为: https://identity.acme.com/connect/endsession?post_logout_redirect_uri

从客户端注销时,url上出现错误。。。。(下面列出了完整的url)

“您正在查找的资源已被删除、名称已更改或暂时不可用。”

AccountController.注销呼叫

await HttpContext.SignOutAsync("Cookies");
await HttpContext.SignOutAsync("oidc");
浏览器中的Url为:

https://identity.acme.com/connect/endsession?post_logout_redirect_uri=https%3A%2F%2Fadmin.acme.com%2Fsignout-callback-oidc&id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IkQ1NjY2RURGQjNFM0M3MDdCNkJCRUFCNEU3NTU3Q0NDNTNBOTc2Q0IiLCJ0eXAiOiJKV1QiLCJ4NXQiOiIxV1p1MzdQanh3ZTJ1LXEwNTFWOHpGT3Bkc3MifQ.eyJuYmYiOjE1MjM4NTI5NDMsImV4cCI6MTUyMzg1NjU0MywiaXNzIjoiaHR0cHM6Ly9pZGVudGl0eS50eXBzeS5jb20iLCJhdWQiOiJ0eXBzeS1pbmRpdmlkdWFsIiwibm9uY2UiOiI2MzY1OTQ0OTczMzc2OTAzMjQuTkRFME5EVXlORFF0WldOaU9TMDBOMkkzTFRrM01UY3RZVFl3WldRNVl6UmpObUk1WkRkaE5UUmtNVGN0WWpjM1lTMDBPVE16TFdFeU5tSXRZekpqWW1SaFptWTBPV1EzIiwiaWF0IjoxNTIzODUyOTQzLCJhdF9oYXNoIjoidkZacmdQUUI2UHd5VzBDeUhCV3QzdyIsInNpZCI6IjFlYjQxYzgwYjhmNGUxMTQ4MjViNDhiNmY4OWE1ZWY3Iiwic3ViIjoiYTAxNjI0MzAtZWIyMi00MTU0LWJmNTktMGJhNDliZmQ0NzNkIiwiYXV0aF90aW1lIjoxNTIzODUyOTQxLCJpZHAiOiJsb2NhbCIsIkFzcE5ldC5JZGVudGl0eS5TZWN1cml0eVN0YW1wIjoiMGM1YzQyNTQtOTM4NS00MWFiLWI5MTktNDFhZjgyOTFlNjljIiwiT3JnYW5pc2F0aW9uIjoiRmFuZXRpYyIsImdpdmVuX25hbWUiOiJKdXN0aW4iLCJmYW1pbHlfbmFtZSI6IkRyZXJ1cCIsInJvbGUiOlsiU3R1ZGVudCIsIkFkbWluaXN0cmF0b3IiLCJNYW5hZ2VyIiwiQWRtaW4iLCJUeXBzeS1PcmciXSwicHJlZmVycmVkX3VzZXJuYW1lIjoianVzdGluZEB0eXBzeS5jb20iLCJuYW1lIjoianVzdGluZEB0eXBzeS5jb20iLCJlbWFpbCI6Imp1c3RpbmRAdHlwc3kuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImFtciI6WyJwd2QiXX0.ifQJVB25rAB3HP30F9vtRvzLZ9dHjORHX7cKoG6SLLR3WqGzpoCkjnq10ijffjj2QbsvjxRPvsYPgbVxISwP04V79RFTHqZI7Z39vsBSZSGeJnkhQLXCvMs9i6F4-aiHR9dF3KTMCMOXFfiG0stG69vIMPckUHuTh5yT5a_nFSL4lebLb5AOpPHto8TtTy6SvFOGp7uyXw7d_KVQ3U9lo4RTYvPVePgq9bZf1DcaOL_gutj2EmHVrNc9kDIQRxK4rTbjx2kFrxD2LauEmh-OXTdzjOqtXLQF2jRwV4sGvPImiBOt75vLMlJJUP8B7sEm61bR50hfOqpycm46PO_awryxWGvqItjrYe8P0OQtuaQghCkesjToW4_OPHHQJIX2jXLN3i0SvfmPEB41pqmP73cKvCjMAMeCllfZ8pfRwzsbzvWKYZ2jZkF4CT6zQq4pEGblEl12yC-I59gqRYozhxz1hiPep4KkgHZ40VRjCR5LNu8Mmx2qp8B7xwyfzes1r7VnCeMJJd7LNqRRdE6mszj7vaZdvHb8n7UDud1hzktYLoVUENodCo4KrGuD7QwT28q8IK2sbtcK_98aLap2WeXcuDMsP5zbrGS2Vb3N4YezdqEU7YJjvk9tvdMdafTYe4LKNaq-cDHVnJh_pmXJsL6odwz9eXkddJBPzhHXf6M&state=CfDJ8Pr81inWVH5OlYUuWwOTfYygcAOv4qo4Jl03Su6yhd8WHQz8m-LK-vBDM8CjSBrqjNLz4Qdqx8759Wpts3AsgHnf997vKLyWqQSOgTQPOpy5qyouRMRmHEsk-h5BnQR4_SHIkzo5_kgJQ0xROmsqUD4Aq3o0zYd-rI-GYHiii7P_&x-client-SKU=ID_NET&x-client-ver=2.1.4.0
据我所知,这是工作了好几个月。我看不到代码中有任何变化会影响这一点,因此怀疑这是环境问题

我打开了日志记录,甚至没有触发/connect/endsession。记录所有其他事件

在开发过程中,它起作用,日志显示正在调用的端点:

Endpoint enabled: "Endsession", successfully created handler: "IdentityServer4.Endpoints.EndSessionEndpoint"
Request path "/connect/endsession" matched to endpoint type "Endsession"
客户端在IdentityServer4 Config.cs中配置了正确的PostLogoutRedirectURI

PostLogoutRedirectUris =
                {
                    "https://admin.acme.com/signout-callback-oidc"
                },
有趣的是,如果我手动编辑Url以删除

post_logout_redirect_uri=https%3A%2F%2Fadmin.acme.com%2Fsignout-callback-oidc& 
.AddOpenIdConnect("oidc", options =>
{
    options.SignedOutRedirectUri = "https://admin.acme.com";
}   
然后我成功地重定向到Identity Server的LoggedOut页面

如果我移除

post_logout_redirect_uri=https%3A%2F%2Fadmin.acme.com%2Fsignout-callback-oidc& 
.AddOpenIdConnect("oidc", options =>
{
    options.SignedOutRedirectUri = "https://admin.acme.com";
}   
从startup.cs,我可以成功地从客户端注销(但是不再有重定向后注销)

有人能解释发生了什么事吗

更新-是URL长度问题吗

  • 我做了更多的调查
  • 当我删除post\u logout\u redirect\u uri=https%3a%2f%2fadmin.acme.com%2fsignout回调oidc&它并不总是有效-这是对我之前所说的内容的澄清
  • 如果从state=xxxx开始删除所有内容,则url将被接受,Identity Server将运行并成功重定向回,但它缺少state=xxxxx
  • 然后,我可以将state参数附加到重定向的Url中,该过程就完成了

  • Url(未更改)为2135个字符

  • 我还做了一个测试,将整个url中的一些字符缩短为2095个字符(从state=)并触发Identity Server(但是状态代码是无效的,因为我修改了它)
  • 因此,每当url超过2095个字符时,它就失败了

这使我怀疑这是否是服务器不接受长url的问题?

根据问题中概述的调试,我确定这似乎是url长度的问题

  • 我遵循本文以及本文和本文中的指导,以减少返回的索赔数量,从而减小令牌的大小
  • 这导致问题消失
  • 我仍然不知道这为什么突然停止工作(注意索赔的规模或数量没有改变)
一个积极的结果是,我必须更深入地了解Identity Server的工作原理,我已经成功地优化了整个登录过程,大大加快了速度,并改进了总体实施

总而言之,以下是我所做的一些更改:

不要回来

IdentityServerConstants.StandardScopes.Profile
设置

和使用

public async Task GetProfileDataAsync(ProfileDataRequestContext context)

为了提供您需要的声明(以及不返回我的客户端未使用的声明)

我正在使用identity server 4和asp.net core进行测试,并且在URL长度方面面临相同的问题。我找到了一个可以帮助我的替代方案。AddOpenIdConnect()中有一个选项,您可以设置用于将用户代理重定向到标识提供程序的方法。 我将其设置为“FormPost”,现在请求使用POST而不是GET来调用endsession端点

.AddOpenIdConnect("oidc", options =>
{   
     [...] 
     options.AuthenticationMethod = OpenIdConnectRedirectBehavior.FormPost;
}

可能超过最大URL长度限制?是的-我明白你的意思!但是,为什么它已经工作了几个月,却停止了工作?(好的,也许Azure环境已经进行了一些更新,但我不知道其他人是否有此问题)。Azure中的此类限制是一个众所周知的问题。有没有可能是因为纯粹的(坏)运气,你的URL现在超过了以前没有的限制?我们解决了一个与此类似的问题(与Azure AD集成),将URL中的状态存储在cookie中。我正在根据本文优化我的身份令牌的大小--如果我得到它,将发布解决方案。请检查这是一个比另一个更好的解决方案。事实上,它解决了我的问题,但没有删除索赔,这在某种程度上是不可能的,取决于应用程序。