Когда я пытаюсь передать токен доступа пользователя в качестве токена на предъявителя, я получаю сообщение ошибка, в которой говорится
Код: Выделить всё
System.InvalidOperationException: IDW10503: Cannot determine the cloud Instance. The provided authentication scheme was 'MicrosoftOidc'. Microsoft.Identity.Web inferred 'MicrosoftOidc' as the authentication scheme. Available authentication schemes are 'MicrosoftOidc,Bearer,Cookies,OpenIdConnect'. See https://aka.ms/id-web/authSchemes. вот как я настраиваю аутентификацию в своей программе.cs
Код: Выделить всё
builder.Services.AddAuthentication("MicrosoftOidc")
.AddOpenIdConnect("MicrosoftOidc", oidcOptions =>
{
oidcOptions.Scope.Add(OpenIdConnectScope.OfflineAccess);
oidcOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
oidcOptions.SaveTokens = true;
oidcOptions.Authority = builder.Configuration["AzureAd:Instance"];
oidcOptions.ClientId = builder.Configuration["AzureAd:ClientId"];
oidcOptions.ClientSecret = builder.Configuration["AzureAd:ClientSecret"];
oidcOptions.ResponseType = OpenIdConnectResponseType.Code;
oidcOptions.MapInboundClaims = false;
oidcOptions.TokenValidationParameters.NameClaimType = JwtRegisteredClaimNames.Name;
oidcOptions.TokenValidationParameters.RoleClaimType = "roles";
oidcOptions.TokenValidationParameters.IssuerValidator = AadIssuerValidator.GetAadIssuerValidator(
oidcOptions.Authority,
oidcOptions.Backchannel).Validate;
}).AddJwtBearer()
.AddMicrosoftIdentityWebApp(builder.Configuration)
.EnableTokenAcquisitionToCallDownstreamApi(builder.Configuration.GetValue("DownstreamApi:Scopes"))
.AddInMemoryTokenCaches();
var map = JsonWebTokenHandler.DefaultInboundClaimTypeMap;
builder.Services.AddAuthorization();
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddRazorPages().AddMvcOptions(options=>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).AddMicrosoftIdentityUI();
builder.Services.Configure(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
options.AllowedHosts = builder.Configuration.GetSection("AllowedHosts").Get();
});
builder.Services.AddServerSideBlazor();
builder.Services.AddControllers();
...
var app = builder.Build();
app.UseRewriter(
new RewriteOptions().Add(context =>
{
if (context.HttpContext.Request.Path == "/signout-oidc")
context.HttpContext.Response.Redirect("https://Corrugated.io");
}));
app.UseForwardedHeaders();
app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseRouting();
app.MapControllers();
app.UseAuthentication();
app.UseAuthorization();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
Код: Выделить всё
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/common/",
"TenantId": "be664a41-9b40-4c81-b11e-e52879b29fe9",
"ClientId": "f75fae40-5787-48f4-8834-7354c224e530",
"CallbackPath": "/signin-oidc",
"ClientSecret": "super secret"
},
"DownstreamApi": {
"BaseUrl": "https://graph.microsoft.com/v1.0",
"RelativePath": "me",
"Scopes": [
"user.read"
]
}
}
Также я могу быть попытка вызвать API неправильным способом. Один из других моих внутренних компонентов выполняет вызов js-взаимодействия с другим моим контроллером API и правильно аутентифицируется. Должен ли я просто сделать это? Я думаю, что передача токена на предъявителя будет более правильной. особенно, если позже я попытаюсь внедрить API.
Подробнее здесь: https://stackoverflow.com/questions/781 ... ys-it-isnt
Мобильная версия