【问题标题】:Handle hash (#) in query string处理查询字符串中的哈希 (#)
【发布时间】:2017-02-11 16:38:50
【问题描述】:

我尝试创建简单的 OAuthHandler。 在我的请求(使用implicit flow)之后,服务器向我的页面发送请求,并带有授权码。但是在来自服务器的查询字符串中,所有参数都以哈希(#)开头?

在方法 HandleRemoteAuthenticateAsync 中,我正在尝试解析查询字符串,但没有一个属性包含授权代码或类似的东西。

如何处理查询字符串中的哈希?

【问题讨论】:

  • A # 永远不是查询字符串的一部分,它是一个文档片段,它只能出现在查询字符串之后,而不是其中。什么服务器发送什么?显示网址?
  • 哈希之后(包括哈希)的任何内容甚至都不会传递到您的服务器。您需要先对其进行 URL 编码。
  • REDIRECT_URI#access_token=533bacf01e11f55b536a565b57531ad114461ae8736d6506a3&expires_in=86400&user_id=8492&state=123456
  • 这是一个想要使用的服务

标签: oauth asp.net-core asp.net-core-mvc kestrel-http-server


【解决方案1】:

正如 Joppe 和 David 在 cmets 中提到的,哈希 (#) 之后的任何内容都是片段的一部分,并且不会由浏览器发送到服务器。这就是你的服务器代码看不到它的原因。

隐式流用于 JavaScript 客户端,而不是 Web 服务器。你想要 authorization code flow 代替。重定向将如下所示:

REDIRECT_URI?code=7a6fa...

由于代码是在查询字符串中传输的,而不是片段,您的服务器端代码将能够看到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多