Недопустимый эмитент при вызове ASP.NET Core 2.2 из Angular 7 (MSAL) - PullRequest
0 голосов
/ 14 января 2019

Приложение ASP.NET Core 2.2 с Azure AD B2C (с использованием URL Endpooint v2.0):

Я настроил свое основное приложение следующим образом: AppSettings.js:

"AzureAdB2C": {
  "Instance": "https://login.microsoftonline.com/tfp",
  "ClientId": "{ClientIdGuid}",
  "Domain": "{Subdomain}.onmicrosoft.com",
  "SignUpSignInPolicyId": "B2C_1_SignUpSignInDevelopment"
}

Запуск:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddAuthentication(AzureADB2CDefaults.JwtBearerAuthenticationScheme)
    .AddAzureADB2CBearer(o => Configuration.Bind("AzureAdB2C", o));    
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseAuthentication();
    app.UseMvc(o=>{o.MapRoute(name:"d",template:"{controller}/{action=Index}/{id?}");});   
}

Мой клиент Angular 7 использует MSAL со следующими настройками:

MsalModule.forRoot({
  clientID: environment.azureB2CClientID,
  authority: "https://" + environment.azureTenantIDSubdomain + ".b2clogin.com/tfp/" +
    environment.azureTenantIDSubdomain + ".onmicrosoft.com/" +
    environment.azureSignUpSignInPolicyId + "/v2.0",
  redirectUri: environment.schemeAndAuthority + "/home",
  validateAuthority: false,
  cacheLocation : "localStorage",
  postLogoutRedirectUri: environment.schemeAndAuthority + "/",
  popUp: false
}),

который при вызове API генерирует этот JWT носителя:

"exp": 1547479156,
"nbf": 1547475556,
"ver": "1.0",
"iss": "https://{Subdomain}.b2clogin.com/{Guid1}/v2.0/",
"sub": "{Guid2}",
"aud": "{Guid3}",
"nonce": "{Guid4}",
"iat": 1547475556,
"auth_time": 1547475556,
"oid": "{Guid5}",
"tfp": "B2C_1_SignUpSignInDevelopment"

И мой. Хорошо известный выглядит так: https://login.microsoftonline.com/tfp/{Subdomain}.onmicrosoft.com/B2C_1_SignUpSignInDevelopment/.well-known/openid-configuration

{
  "issuer": "https://login.microsoftonline.com/{ClientGuid}/",
  "authorization_endpoint": "https://login.microsoftonline.com/te/{Subdomain}.onmicrosoft.com/b2c_1_signupsignindevelopment/oauth2/authorize",
  "token_endpoint": "https://login.microsoftonline.com/te/{Subdomain}.onmicrosoft.com/b2c_1_signupsignindevelopment/oauth2/token",
    ...
}

Всякий раз, когда я вызываю мой [Authorize] защищенный API Controler (ASP.NET Core 2.2), я получаю 401:

www-authenticate: Bearer error="invalid_token", error_description="The issuer is invalid"

Я понял, что Эмитент в .well известен, чем у сгенерированного Bearer JWT. Но я не установил эмитента ни на угловой стороне, ни на стороне Azure AD B2C.

Эта проблема вызвана различными эмитентами на сторонах Angular и Azure AD B2C? И если да, то какого эмитента я должен изменить и как?

1 Ответ

0 голосов
/ 15 января 2019

Необходимо убедиться, что домены эмитента совместимы как для клиентского приложения, так и для приложения API; в противном случае клиентскому приложению выдается токен доступа для одного домена эмитента, а приложение API проверяет его для другого домена эмитента.

Вы используете {tenant}.b2clogin.com для клиентского приложения и login.microsoftonline.com для приложения API.

Я предлагаю вам использовать {tenant}.b2clogin.com для обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...