Oauth状态缺失或无效,如何修复?

pvabu6sv  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(319)

我尝试发送OAuth请求,但在选择帐户后总是收到此错误。
这是我尝试过的,我读到状态应该是随机生成的,但我仍然得到错误。

public static string GetOauthUri(string state, string ClientId)
        {
            StringBuilder sbUri = new StringBuilder(OauthUri);
            sbUri.Append("client_id=" + ClientId);
            sbUri.Append("&redirect_uri=" + RedirectUri);
            sbUri.Append("&response_type=" + "code");
            sbUri.Append("&scope=" + Scopes);
            Random random = new Random();
            string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            sbUri.Append("&state=" + new string(Enumerable.Repeat(chars, 8).Select(s => s[random.Next(s.Length)]).ToArray()));
            sbUri.Append("&access_type=" + "offline");
            sbUri.Append("&approval_prompt=" + "force");

            return sbUri.ToString();
        }

即使我省略了状态,我也会得到错误。

g9icjywg

g9icjywg1#

如果您查看Oauth2.0 rfc(https://www.rfc-editor.org/rfc/rfc6749#section-4.1.1),您可以看到您的请求应该如下所示:

GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
        &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
    Host: server.example.com

状态应该从 * 客户端 * 传递(步骤(A)),然后传递到 * 用户代理 *,然后传递到 * 授权 * 服务器。我怀疑状态应该由您的实现中的客户端生成。
授权服务器验证请求,以确保所有必需的参数都存在且有效。如果请求有效,则授权服务器对资源所有者进行身份验证,并获得授权决定(通过询问资源所有者或通过其他方式建立批准)。
服务器实现很可能会检查特定的状态输入,但您不知道是哪一个。您应该从服务开发人员/维护人员那里获得有关此问题的信息。如果他们没有时间正确实现此功能,他们可能会使用RCF 'xyz'的示例值作为伪参数值。
同时尝试更改参数顺序以匹配rfc示例并避免多个作用域,因为使用空格的作用域串联有时可能会被服务器“剪切”其他key=values对而误解。

相关问题