Which version of Microsoft Identity Web are you using?
Note that to get help, you need to run the latest version.
Microsoft Identity Web 1.3.0
Where is the issue?
- Web app
- Web API
- Token cache serialization
- Other (please describe)
Is this a new or an existing app?
a. The app is in production and I have upgraded to a new version of Microsoft Identity Web.
Repro
Startup.cs
services.AddAuthentication()
.AddMicrosoftIdentityWebApi(
(jwtOpt) =>
{
Configuration.Bind("AzureAdB2C", jwtOpt);
jwtOpt.TokenValidationParameters.ValidateIssuer = false;
},
(msIdOpt) => Configuration.Bind("AzureAdB2C", msIdOpt));
appsettings.json
"AzureAdB2C": {
"Instance": "https://mytenant.b2clogin.com",
"ClientId": "ccb2a9f5-3b90-4f01-b4de-619daa1b9e49",
"ClientSecret": "*****",
"Domain": "mytenant.onmicrosoft.com",
"SignUpSignInPolicyId": "B2C_1A_Signup_Signin"
}
JWT
{
"typ": "JWT",
"alg": "RS256",
"kid": "0kcuEIFYUmeulxXnEdH43prYHw3HVshbaNlXyRpgQb4"
}.{
"iss": "https://mytenant.b2clogin.com/97d559f9-30de-42c5-b79a-1645d748e84d/v2.0/",
"exp": 1606881975,
"nbf": 1606874775,
"aud": "3ff65921-74c1-4ec6-8c37-f012ca63811e",
"tid": "fe2738ba-6955-4bcd-ba5d-a1fef14fc86a",
"email": "johndoe@example.com",
"given_name": "John",
"family_name": "Doe",
"name": "John Doe",
"idp": "myIdP",
"sub": "67d4fe2f-f68b-4580-ad78-5c0640f4cf30",
"emails": [
"johndoe@example.com"
],
"scp": "user_impersonation",
"azp": "48ff8d08-0206-4f8a-9c90-084e6eae7d36",
"ver": "1.0",
"iat": 1606874775
}.[Signature]
Expected behavior
Since JwtBearerOptions.TokenValidationParameters.ValidateIssuer is set to false, I would expect the issuer not to be validated.
Actual behavior
The issuer is validated anyway. This is a problem because it fails validation with the default AadIssuerValidator.
Possible solution
Workaround (Register a dummy [or custom] IssuerValidator):
Startup.cs
services.AddAuthentication()
.AddMicrosoftIdentityWebApi(
(jwtOpt) =>
{
Configuration.Bind("AzureAdB2C", jwtOpt);
jwtOpt.TokenValidationParameters.IssuerValidator = (a, b, c) => a;
},
(msIdOpt) => Configuration.Bind("AzureAdB2C", msIdOpt));
Possible Solution:
microsoft-identityweb/src/Microsoft.Identity.Web/WebApiExtensions/MicrosoftIdentityWebApiAuthenticationBuilderExtensions.cs, line 193
// If the developer registered an IssuerValidator, do not overwrite it
if (options.TokenValidationParameters.ValidateIssuer && // <--- Add This
options.TokenValidationParameters.IssuerValidator == null)
{
// Instead of using the default validation (validating against a single tenant, as we do in line of business apps),
// we inject our own multi-tenant validation logic (which even accepts both v1.0 and v2.0 tokens)
MicrosoftIdentityIssuerValidatorFactory microsoftIdentityIssuerValidatorFactory =
serviceProvider.GetRequiredService<MicrosoftIdentityIssuerValidatorFactory>();
options.TokenValidationParameters.IssuerValidator =
microsoftIdentityIssuerValidatorFactory.GetAadIssuerValidator(options.Authority).Validate;
}
Which version of Microsoft Identity Web are you using?
Note that to get help, you need to run the latest version.
Microsoft Identity Web 1.3.0
Where is the issue?
Is this a new or an existing app?
a. The app is in production and I have upgraded to a new version of Microsoft Identity Web.
Repro
Startup.cs
appsettings.json
JWT
Expected behavior
Since
JwtBearerOptions.TokenValidationParameters.ValidateIssueris set tofalse, I would expect the issuer not to be validated.Actual behavior
The issuer is validated anyway. This is a problem because it fails validation with the default
AadIssuerValidator.Possible solution
Workaround (Register a dummy [or custom]
IssuerValidator):Startup.cs
Possible Solution:
microsoft-identityweb/src/Microsoft.Identity.Web/WebApiExtensions/MicrosoftIdentityWebApiAuthenticationBuilderExtensions.cs, line 193