【发布时间】:2022-01-04 15:23:24
【问题描述】:
我有一个 Blazor Server 应用程序,我设法通过 Azure AD 进行身份验证,但我无法检索 Azure AD 令牌。我有以下内容:
_Host.cshtml:
@{
Layout = null;
var tokens = new InitialApplicationState
{
AccessToken = await HttpContext.GetTokenAsync("access_token"),
RefreshToken = await HttpContext.GetTokenAsync("refresh_token")
};
}
<component type="typeof(App)" param-InitialState="tokens" render-mode="ServerPrerendered" />
Startup.cs:
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.ResponseType = OpenIdConnectResponseType.Code;
options.SaveTokens = true;
options.Scope.Add("User.Read");
});
services.AddControllersWithViews()
.AddMicrosoftIdentityUI();
services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
});
services.AddScoped<TokenProvider>();
TokenProvider.cs:
public class TokenProvider
{
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
}
InitialApplicationState.cs:
public class InitialApplicationState
{
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
}
GradingApiService.cs:
public class GradingApiService : IGradingApiService
{
private readonly HttpClient _httpClient;
private readonly IConfiguration _configuration;
private readonly TokenProvider _tokenProvider;
public GradingApiService(HttpClient httpClient, IConfiguration configuration, TokenProvider tokenProvider)
{
_httpClient = httpClient;
_configuration = configuration;
_tokenProvider = tokenProvider;
}
public async Task<Gradings> GetRiskAppetiteGradingByQuoteID()
{
try
{
var token = _tokenProvider.AccessToken;
var request = new HttpRequestMessage(HttpMethod.Get,
"https://grading-api-func-uks-tst.azurewebsites.net/api/Gradings/a0999a23-b275-4993-a959-6185cd769c0a");
request.Headers.Add("Authorization", $"Bearer {token}");
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsAsync<Gradings>();
}
catch
{
return new Gradings();
}
}
}
所以每当我检索令牌时,我都会获得一个空值。你能帮我理解这有什么问题吗?
非常感谢。
【问题讨论】:
-
如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记将其从灰色切换为已填充)。这对其他社区成员可能是有益的。谢谢
标签: azure azure-active-directory blazor token blazor-server-side