我正在編寫一個MVC5 Web應用程序,以允許我在Visual Studio Team Services(VSTS)中查詢我們的工作項目。如何使用授權例程提供的VSTS OAuth2承載令牌?
已經按照教程this one和this one我已成功創建應用程序,以便它將檢索使用我爲開發目的創建的個人訪問令牌(PAT)所需的工作項目。我還密切關注示例here,成功創建了整個OAuth2過程,以便用戶被帶到VSTS,被要求授權我的應用程序,然後返回到我的回調頁面。回撥URL正確包含用戶的訪問令牌,刷新令牌等。到現在爲止還挺好。
我將用戶的刷新令牌存儲在他們的用戶記錄中的數據庫中,以及有效日期和時間(以便我知道如果他們在訪問令牌已過期後嘗試訪問應用程序時刷新令牌)。
我的問題是,我不知道如何使用Access Token來代替用戶查詢VSTS的C#代碼中的自己的PAT。我使用的代碼如下(它實際上與我在上面鏈接的GitHub上的示例中的代碼相同),並且它工作正常,但正如您可以看到它使用PAT。我該如何使用用戶的訪問令牌,目前我只是將其作爲string
作爲API返回(可能是錯誤的?)。
public class GetFeatures
{
readonly string _uri;
readonly string _personalAccessToken;
readonly string _project;
public GetFeatures()
{
_uri = "https://myaccount.visualstudio.com";
_personalAccessToken = "abc123xyz456"; //Obviously I've redacted my actual PAT
_project = "My Project";
}
public List<VSTSFeatureModel> AllFeatures()
{
Uri uri = new Uri(_uri);
string personalAccessToken = _personalAccessToken;
string project = _project;
VssBasicCredential credentials = new VssBasicCredential("", _personalAccessToken);
//create a wiql object and build our query
Wiql wiql = new Wiql()
{
Query = "Select [State], [Title] " +
"From WorkItems " +
"Where [Work Item Type] = 'Feature' " +
"And [System.TeamProject] = '" + project + "' " +
"And [System.State] <> 'Removed' " +
"Order By [State] Asc, [Changed Date] Desc"
};
//create instance of work item tracking http client
using (WorkItemTrackingHttpClient workItemTrackingHttpClient = new WorkItemTrackingHttpClient(uri, credentials))
{
//execute the query to get the list of work items in the results
WorkItemQueryResult workItemQueryResult = workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result;
//some error handling
if (workItemQueryResult.WorkItems.Count() != 0)
{
//...do stuff
}
return null;
}
}
}
我想知道這是否是這樣的,但是看着班級要求的參數,我不知道應該傳遞什麼樣的價值觀,而且看起來太複雜了。我有用戶的訪問令牌,當然,我所需要做的就是將其包含在我對API的請求中(如「使用訪問令牌」一節中所暗示的:https://docs.microsoft.com/en- gb/vsts/integrate/get-started/authentication/oauth,儘管沒有說明如何在.NET客戶端庫中這樣做)。 –