是的它可能我實際上只是在我的.Net應用程序中使用Web瀏覽器控件。你已經標記了這個谷歌Oauth,所以我假設你正在使用谷歌身份驗證服務器這樣做。我懷疑你正在使用一個谷歌客戶端庫,默認情況下它會在新的瀏覽器窗口中打開它。例如,Google .Net客戶端庫就是爲此而設計的。
訣竅可能需要您使用不需要重定向URI的本地或其他類型憑據來使用Web憑證。這些憑據通常用於已安裝的應用程序,但它們可用於Web。用Web憑證做這件事可能是有可能的,但是我認爲它會取決於你在做什麼。
谷歌OAuth2流程:
在流程的第一步是創建網址的用戶進行身份驗證。這是一個網頁,你無法做任何改變。所以你的應用程序需要能夠向用戶顯示一個網頁。
https://accounts.google.com/o/oauth2/auth?client_id={clientid}.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code
通過提供骨灰盒:IETF:WG:OAuth的:2.0:OOB你基本上是告訴auth服務器只返回代碼,你來自哪裏,發送它。
該代碼返回給您,您將需要將其交換。這個電話是一個HTTP POST。
https://accounts.google.com/o/oauth2/token
code=4/X9lG6uWd8-MMJPElWggHZRzyFKtp.QubAT_P-GEwePvB8fYmgkJzntDnaiAI&client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code
響應
{
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4"
}
現在你有一個刷新托克和訪問令牌。您可以使用另一個HTTP POst呼叫刷新您的訪問令牌。
https://accounts.google.com/o/oauth2/token
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token
響應
{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}
所以只要你可以嵌入驗證網址到您的應用程序,您可以自己去取。您不需要重定向URI。我對google 3 legged oauth2
你真的想做什麼?通常情況下,重定向不會打開新的選項卡(但它會發出新的請求)。 –
@TatsuyukiIshi問題是,通過這種認證,我需要在瀏覽器中打開同意窗口,然後同意窗口重定向到給定的url,當然,它確實執行請求。我的程序處理請求並沒有問題,但瀏覽器選項卡已打開,因此無法關閉它,因爲無法使用JavaScript關閉瀏覽器選項卡,該選項卡未由javascript打開。我的臨時解決方案是返回一些HTML,告訴用戶該程序收到了代碼,但如果我可以直接顯示該消息,它會更乾淨。 –
您如何打開瀏覽器窗口?例如,如果它是一個爲獲得用戶同意而打開瀏覽器的桌面應用程序,它可以通過向瀏覽器窗口發送消息來模擬用戶的操作(包括關閉窗口)。如果它是一個web應用程序,它可以打開JavaScript('window.open()')的同意,以便它能夠通過'window.close()'等關閉打開的窗口。 – weirdan