【发布时间】:2019-07-14 15:31:41
【问题描述】:
在用户从 OpenId Connect 进行身份验证后,我试图从 AAD 中查找访问令牌。 它是与 AAD OpenId Connect 集成的 Web 应用程序。我需要获取访问令牌来调用另一个使用相同 AAD 的 API。这是我尝试过的:
- 克隆this示例代码。
-
在 Startup.cs 文件中,添加以下代码块:
public void ConfigureServices(IServiceCollection services) { services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor(); services.AddAuthentication(sharedOptions => { sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddAzureAd(options => Configuration.Bind("AzureAd", options)) .AddOpenIdConnect("oidc", options => { options.Authority = "http://localhost:5000"; options.ClientId = "<<client-id>>"; options.SignInScheme = "cookie"; options.SaveTokens = true; options.GetClaimsFromUserInfoEndpoint = true; options.RequireHttpsMetadata = false; }) .AddCookie(); services.AddMvc();} -
在
HomeController类中,我添加了一个名为httpContextAccessor的私有变量,并将其设置在构造函数中。private IHttpContextAccessor _httpContextAccessor; public HomeController(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } -
在
HomeController类中,我添加了一些代码来访问访问令牌。public IActionResult Index() { if (User.Identity.IsAuthenticated) { var attempt1 = Request.Headers["Authorization"]; var attempt2 = HttpContext.GetTokenAsync("access_token"); var attempt3 = _httpContextAccessor.HttpContext.GetTokenAsync("access_token"); var attempt4 = _httpContextAccessor.HttpContext.Request.Headers["Authorziation"]; } return View(); }
但它们都返回空或 null。我错过了什么吗?
我查看了以下帖子以供参考: How to refresh access token How to get access token from HttpContext in .Net core 2.0
【问题讨论】:
标签: authentication asp.net-core azure-active-directory access-token openid-connect