gpt4 book ai didi

oauth-2.0 - DotNetOpenAuth OAuth2.0 状态参数

转载 作者:行者123 更新时间:2023-12-04 16:12:00 26 4
gpt4 key购买 nike

我正在使用 DotNetOpenAuth 通过 OAuth2 连接到 Facebook 和 Google。 OAuth 规范要求在 request_uri 中不提供额外的参数,而 Google 实际上通过在您使用它们定义 Google 应用程序时强制指定确切的回调 uri 来强制执行此操作。

我想要完成的是能够在用户通过 Facebook 或 Google 进行身份验证后将其返回到特定 URL。流程是这样的,用户单击 protected 链接,他们使用 returnUrl 参数转发到我的登录页面,然后我根据他们选择的 OAuth2 授权服务器启动授权过程。

由于 request_uri 中不能包含任何参数(尽管 Facebook 允许您使用此参数),因此我无法将 returnUrl 参数发送到授权服务器并将其取回,以便当用户返回我的网站时,我将它们转发到他们试图访问的 protected 页面。我能做的最好的事情就是将它们转发到主页或成员(member)欢迎页面。

解决这个问题的方法是使用授权服务器将发送回 request_uri 的“state”参数,但我找不到用 DotNetOpenAuth 指定它的方法。

默认情况下,代码看起来像使用 SessionID 作为状态参数来验证从授权服务器返回的请求。在 WebServerClient 类上指定 IClientAuthorizationTracker 可以让我在响应从授权服务器返回时插入我的逻辑,但在准备授权请求时不会调用它,因此我无法插入我的附加状态。

这是来自 WebServerClient.cs 的 PrepareRequestUserAuthorization 的代码:

            // Mitigate XSRF attacks by including a state value that would be unpredictable between users, but
// verifiable for the same user/session.
// If the host is implementing the authorization tracker though, they're handling this protection themselves.
if (this.AuthorizationTracker == null) {
var context = this.Channel.GetHttpContext();
if (context.Session != null) {
request.ClientState = context.Session.SessionID;
} else {
Logger.OAuth.WarnFormat("No request context discovered, so no client state parameter could be set to mitigate XSRF attacks.");
}
}

这里没有其他块,这是我希望能够一起玩并插入我自己的数据的块。

关于我缺少什么的任何提示?

最佳答案

状态参数必然专注于减轻 XSRF 攻击。既然你已经有一个用户 session ,你能不能只存储 returnUrl在 session 字典中?

或者,您可以 file an issue DotNetOpenAuth 要求您允许将自己的数据捆绑到状态参数中(以及 DNOA 自己的 XSRF 缓解代码)。

关于oauth-2.0 - DotNetOpenAuth OAuth2.0 状态参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11530269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com