2013-02-05 34 views
1

我正在嘗試實現OAuth2Authorization Server,並且我正在通過一個MVC 4 webclient項目中的DotNetOpenAuth.AspNet.Clients.OAuth2Client連接到它。DotNetOpenAuth並使用MVC 4刷新令牌4

在我的SPA webclient中,我能夠獲得AccessToken覆蓋QueryAccessTokenOAuth2Client

與我的AccessToken我能夠調用一個REST API服務,並獲得成功的結果作爲用戶額外的數據。

.... 
HttpWebRequest apiRequest = 
    (HttpWebRequest)WebRequest.Create(".....://localhost:4314/api/TodoList"); 
DotNetOpenAuth.OAuth2.ClientBase.AuthorizeRequest(apiRequest, AccessToken); 
.... 

但是,一段時間後,我AccessToken去到期,我收到一個錯誤,所以我需要刷新我的AccessToken明年REST服務電話。

如何在OAuth2Client的方法內更新我的AccessToken? 是否可以使用ClientBase.RefreshAuthorization(....)

由於 甜瓜

回答

2

使用DotNetOpenAuth.AspNet命名空間用於授權(使用令牌反覆Web請求接入)的上游游泳。該名稱空間具有僅用於登錄(身份驗證)的客戶端。

更適合你在做的是使用WebServerClient類,它是DotNetOpenAuth核心庫的一部分。它根據需要自動刷新訪問令牌。

+0

感謝您的回答,但是通過這種方式,我無法使用相同的accesstoken進行身份驗證和呼叫安撫服務。我嘗試使用: ... var entity = CreateQueryString(new Dictionary {「Client_id」,_appId},{「Client_secret」,_appSecret},{「Refresh_token」,Authorization。 RefreshToken},{ 「Grant_type」, 「refresh_token」},}); ... 在平靜呼叫失敗後獲得新的accesstoken。 你認爲可以工作嗎? 謝謝 Carmelo – Carmelo

+0

啊,所以你*也*認證用戶。我明白你希望如何一步完成。您的查詢字符串有不正確的大寫。如果你有所有這些數據來填充它,我建議你調用[ClientBase.RefreshAuthorization](https://github.com/DotNetOpenAuth/DotNetOpenAuth/blob/v4.2/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase .cs#L187),並將這些數據填充到您自己的IAuthorizationState實例中,並讓DotNetOpenAuth處理令牌刷新的機制。 –

+0

感謝您的建議。我會嘗試。卡梅羅 – Carmelo