in src/Microsoft.Health.Dicom.Api/Modules/SecurityModule.cs [35:97]
public void Load(IServiceCollection services)
{
EnsureArg.IsNotNull(services, nameof(services));
// Set the token handler to not do auto inbound mapping. (e.g. "roles" -> "http://schemas.microsoft.com/ws/2008/06/identity/claims/role")
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
if (_securityConfiguration.Enabled)
{
string[] validAudiences = GetValidAudiences();
string challengeAudience = validAudiences?.FirstOrDefault();
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Authority = _securityConfiguration.Authentication.Authority;
options.RequireHttpsMetadata = true;
options.Challenge = $"Bearer authorization_uri=\"{_securityConfiguration.Authentication.Authority}\", resource_id=\"{challengeAudience}\", realm=\"{challengeAudience}\"";
options.TokenValidationParameters = new TokenValidationParameters
{
ValidAudiences = validAudiences,
};
});
services.AddControllers(mvcOptions =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
mvcOptions.Filters.Add(new AuthorizeFilter(policy));
});
if (_securityConfiguration.Authorization.Enabled)
{
services.Add<DicomRoleLoader>().Transient().AsImplementedInterfaces();
services.AddSingleton(_securityConfiguration.Authorization);
services.AddSingleton<IAuthorizationService<DataActions>, RoleBasedAuthorizationService<DataActions, IDicomRequestContext>>();
}
else
{
services.AddSingleton<IAuthorizationService<DataActions>, DisabledAuthorizationService<DataActions>>();
}
}
else
{
services.AddSingleton<IAuthorizationService<DataActions>, DisabledAuthorizationService<DataActions>>();
}
services.Add<DicomRequestContextAccessor>()
.Singleton()
.AsSelf()
.AsService<RequestContextAccessor<IDicomRequestContext>>()
.AsService<IDicomRequestContextAccessor>();
services.AddSingleton<IClaimsExtractor, PrincipalClaimsExtractor>();
}