根据当前经过身份验证的用户创建VssCredentials

问题描述

我正在使用ADAL + Windows Azure Active Directory从Angular应用程序向我的WebAPI应用程序验证用户身份,

public void ConfigureAuth(IAppBuilder app)
{
    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
        new WindowsAzureActiveDirectoryBearerAuthenticationoptions
        {
            Tenant = ConfigurationManager.AppSettings["ida:Tenant"],TokenValidationParameters = new TokenValidationParameters
            {
                ValidAudience = ConfigurationManager.AppSettings["ida:ClientID"]
            },});
}

这没有问题。

我有一些代码可用于修改Azure DevOps中的工作项:

 Uri baseVsoUri = new Uri("https://xxxxx.visualstudio.com/DefaultCollection");
 VssCredentials creds = new VssBasicCredential("",azureDevOpsPersonalAccesstoken);
 VssConnection conn = new VssConnection(baseVsoUri,creds);

 ...

 await conn.UpdateWorkItemAsync(jsonPatchOperations,1);

我面临的问题是因为我的个人访问令牌已用于通过Azure DevOps进行身份验证,因此我被列为已更新WorkItem。

是否可以为当前通过WebAPI进行身份验证的用户创建VssCredentials对象?

修改

我尝试了this问题中建议的代码来自行设置ChangedBy属性,但我没有所需的权限:

You don't have bypass rules permission. Please contact your collection administrator to grant this permission for enabling this action.

解决方法

您可以签出此example project来使用ADAL通过交互式提示来验证用户身份并调用rest api。

您还可以签出本文档Authorize access to REST APIs with OAuth 2.0来为用户生成访问令牌,然后使用该令牌调用rest api,

向您的Web应用程序用户授权以进行REST API访问,因此您的应用程序不再继续询问用户名和密码。 Azure DevOps Services使用OAuth 2.0协议为用户授权您的应用并生成访问令牌。从应用程序调用REST API时,请使用此令牌。

这里是您可以检出的example project

有关更多示例,请参见Choosing the right authentication mechanism

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...