I create an ASP.NET Core 3 React project and I keep getting this error.
Unhandled Rejection (Error): Could not load settings for 'WebPortal'
GET https://localhost:44367/_configuration/WebPortal 401
Uncaught (in promise) Error: Could not load settings for 'WebPortal'
at AuthorizeService.ensureUserManagerInitialized (AuthorizeService.js:184)
at async AuthorizeService.getUser (AuthorizeService.js:24)
at async AuthorizeService.isAuthenticated (AuthorizeService.js:15)
at async Promise.all (index 0)
at async LoginMenu.populateState (LoginMenu.js:26)
Here is the error popped (AuthorizeService.js
):
async ensureUserManagerInitialized() {
if (this.userManager !== undefined) {
return;
}
let response = await fetch(ApplicationPaths.ApiAuthorizationClientConfigurationUrl);
if (!response.ok) {
throw new Error('Could not load settings for '${ApplicationName}');
}
let settings = await response.json();
settings.automaticSilentRenew = true;
settings.includeIdTokenInSilentRenew = true;
settings.userStore = new WebStorageStateStore({
prefix: ApplicationName
});
this.userManager = new UserManager(settings);
this.userManager.events.addUserSignedOut(async () => {
await this.userManager.removeUser();
this.updateState(undefined);
});
}
My ApiAuthorizationConstants.js
file:
export const ApplicationName = 'WebPortal';
export const QueryParameterNames = {
ReturnUrl: 'returnUrl',
Message: 'message'
};
export const LogoutActions = {
LogoutCallback: 'logout-callback',
Logout: 'logout',
LoggedOut: 'logged-out'
};
export const LoginActions = {
Login: 'login',
LoginCallback: 'login-callback',
LoginFailed: 'login-failed',
Profile: 'profile',
Register: 'register'
};
const prefix = '/authentication';
export const ApplicationPaths = {
DefaultLoginRedirectPath: '/',
ApiAuthorizationClientConfigurationUrl: '/_configuration/${ApplicationName}',
ApiAuthorizationPrefix: prefix,
Login: '${prefix}/${LoginActions.Login}',
LoginFailed: '${prefix}/${LoginActions.LoginFailed}',
LoginCallback: '${prefix}/${LoginActions.LoginCallback}',
Register: '${prefix}/${LoginActions.Register}',
Profile: '${prefix}/${LoginActions.Profile}',
LogOut: '${prefix}/${LogoutActions.Logout}',
LoggedOut: '${prefix}/${LogoutActions.LoggedOut}',
LogOutCallback: '${prefix}/${LogoutActions.LogoutCallback}',
IdentityRegisterPath: '/Identity/Account/Register',
IdentityManagePath: '/Identity/Account/Manage'
};
In the console, I see:
Can anyone help me?
According to @Woodz and @Jack comments, I investigate the problem and find out the issue. The issue is Home page required authorization.I'll post my solution in here and it may help for someone.
Reason for the Issue
In my Startup.cs class, I enabled authorization for all Controllers. See below code,
services.AddMvc(options => {
//**************Add General Policy *********************
//User need to be a Authorized system user to access pages except allowAnonymous annotation
var generalPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(generalPolicy));
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
})
Solution
Change Authorization in OidcConfigurationController.cs (Add AllowAnonymous annotation).
[AllowAnonymous]
public class OidcConfigurationController : Controller
{
private readonly ILogger<OidcConfigurationController> _logger;
public OidcConfigurationController(IClientRequestParametersProvider
clientRequestParametersProvider, ILogger<OidcConfigurationController>
logger)
{
ClientRequestParametersProvider = clientRequestParametersProvider;
_logger = logger;
}
public IClientRequestParametersProvider ClientRequestParametersProvider
{ get; }
[HttpGet("_configuration/{clientId}")]
public IActionResult GetClientRequestParameters([FromRoute]string clientId)
{
var parameters =
ClientRequestParametersProvider.GetClientParameters(HttpContext,
clientId);
return Ok(parameters);
}
}