我使用DotNetOpenAuth通過的OAuth2連接到Facebook和谷歌。 OAuth規範要求在request_uri中不提供其他參數,而Google實際上通過在您定義Google App時強制指定確切的回調函數來強制執行此操作。DotNetOpenAuth OAuth2.0的狀態參數
我要完成什麼是能夠給用戶返回到一個特定的URL,他們已經通過驗證與Facebook或谷歌之後。流程就是這樣,用戶點擊一個受保護的鏈接,它們會通過returnUrl參數轉發到我的登錄頁面,然後根據他們選擇的OAuth2授權服務器啓動授權流程。
由於request_uri中不能有任何參數(儘管Facebook可以讓您避開這個問題),我無法將returnUrl參數發送到授權服務器並返回,以便當用戶返回到我的網站,我轉發他們到他們試圖訪問受保護的頁面。我能做的最好的是轉發他們到主頁或成員的歡迎頁面。
解決此問題的方法是使用授權服務器將發送回request_uri的「狀態」參數,但我找不到用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.");
}
}
這裏沒有別的塊這就是我本來期望能夠在自己的數據一起玩耍和插件。
對我缺少什麼,我有什麼建議?
我的意思是說callback_uri而不是REQUEST_URI – Ameen 2012-07-18 03:29:12