Asp.net 生成个人访问令牌以调用Azure Web Api(OAuth)

Asp.net 生成个人访问令牌以调用Azure Web Api(OAuth),asp.net,azure,oauth,oauth-2.0,azure-active-directory,Asp.net,Azure,Oauth,Oauth 2.0,Azure Active Directory,我有一个ASP.NET Web API,我在Azure Active Directory下注册了一个新应用程序 这就是ConfigureAuth在Web API源代码中的方式 public void ConfigureAuth(IAppBuilder app) { // Configure the db context and user manager to use a single instance per request app

我有一个ASP.NET Web API,我在Azure Active Directory下注册了一个新应用程序

这就是ConfigureAuth在Web API源代码中的方式

public void ConfigureAuth(IAppBuilder app)
        {
            // Configure the db context and user manager to use a single instance per request
            app.CreatePerOwinContext(ApplicationDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

            // Enable the application to use a cookie to store information for the signed in user
            // and to use a cookie to temporarily store information about a user logging in with a third party login provider
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // Configure the application for OAuth based flow
            OAuthOptions = new OAuthAuthorizationServerOptions
            {
                AllowInsecureHttp = false,
                TokenEndpointPath = new PathString("/Token"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
                Provider = new ApplicationOAuthProvider("self"),
                AuthenticationType = "LocalBearer"
            };

            // Enable the application to use bearer tokens to authenticate users
            app.UseOAuthBearerTokens(OAuthOptions);
        }
public void ConfigureAuth(IAppBuilder应用程序)
{
//将db上下文和用户管理器配置为每个请求使用一个实例
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext(ApplicationUserManager.Create);
//使应用程序能够使用cookie存储登录用户的信息
//以及使用cookie临时存储用户登录第三方登录提供商的信息
app.UseCookieAuthentication(新的CookieAuthenticationOptions());
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
//为基于OAuth的流配置应用程序
OAuthOptions=新的OAuthAuthorizationServerOptions
{
AllowInsecureHttp=false,
TokenEndpointPath=新路径字符串(“/Token”),
AccessTokenExpireTimeSpan=TimeSpan.FromDays(14),
Provider=新的ApplicationAuthProvider(“自身”),
AuthenticationType=“LocalBearer”
};
//使应用程序能够使用承载令牌对用户进行身份验证
应用程序使用OAuthBealerTokens(OAuthOptions);
}
另一方面,我有一个命令行应用程序,可以访问Web API并向其请求一些数据

从命令行中,我无法使用用户凭据登录(这是一项要求),因此我希望生成一个可能在一两年内过期的个人访问令牌,并使用该个人访问令牌构造API调用。如果可能的话,我可以避免使用用户名/密码登录以生成令牌

有关于这个场景的文档吗?如何为控制台应用程序生成个人访问令牌,以连接到Azure中托管的Web API

因此,我想生成一个可能在一两年内到期的个人访问令牌,并用该个人访问令牌构造我的API调用

首先,Azure AD发出的访问令牌的默认生存期为1h,最大值为在Azure AD中配置令牌生存期后的1天

如果可能的话,我可以避免使用用户名/密码登录以生成令牌


您可以使用OAuth 2.0客户端凭据流从Azure AD获取令牌以访问受保护的API资源,然后您的控制台应用程序将作为应用程序标识而不是用户标识运行。请单击以获取有关守护程序或服务器应用程序到Web API身份验证场景的更多详细信息,并单击以获取代码示例。如果访问令牌过期,ADAL将帮助您续订。

如果我理解得很清楚,您不希望使用任何用户凭据,而是希望使用与应用程序相关的凭据。 如果是这样的话,我相信您对客户端凭据流感兴趣,下面的示例详细解释了这一点:

  • ,这是关于将证书用作应用程序的机密。本例的有趣之处在于,如果您想快速尝试,它可以通过PowerShell脚本完全自动化

  • ,与上一个非常相似,但使用密码而不是证书。这可能更接近你的需要


在这两种情况下,您都可以表示这些机密将在何时过期(当您创建证书时,例如您提供了过期日期)

我希望在VSTS中使用类似的个人访问令牌:(我将查看示例代码,并返回结果。非常感谢!)个人访问令牌与用户相关。你想让你的应用程序以特定用户的名义运行吗?@user3587624正在等待你的反馈。是的,这就是我想要的。谢谢!