Search code examples
asp.netreactjsasp.net-coreasp.net-core-identity

Unhandled Rejection (Error): Could not load settings for 'WebPortal' - ASP.NET Core React


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:

Error console

Can anyone help me?


Solution

  • 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);
          }
      }