Viene visualizzato l'errore "L'applicazione client non è nota o non è autorizzata". quando si accede ad un'area protetta del mio sito.Identity Server 3 - L'applicazione client non è nota o non è autorizzata
Ecco i miei clienti:
public static class Clients
{
public static IEnumerable<Client> Get()
{
return new[]
{
new Client
{
Enabled = true,
ClientName = "Web Application",
ClientId = "webapplication",
Flow = Flows.AuthorizationCode,
ClientSecrets = new List<Secret>
{
new Secret("webappsecret".Sha256())
},
RedirectUris = new List<string>
{
UrlManager.WebApplication
},
PostLogoutRedirectUris = new List<string>
{
UrlManager.WebApplication
},
AllowedScopes = new List<string>
{
Constants.StandardScopes.OpenId,
Constants.StandardScopes.Profile,
Constants.StandardScopes.Email,
Constants.StandardScopes.Roles,
Constants.StandardScopes.OfflineAccess,
"read",
"write"
}
}
};
}
}
Ecco il mio avvio di applicazioni web:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies"
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
Authority = UrlManager.AuthenticationService + "identity",
ClientId = "webapplication",
Scope = "openid profile",
ResponseType = "code id_token",
RedirectUri = UrlManager.WebApplication,
SignInAsAuthenticationType = "Cookies"
});
}
}
Questo è il mio servizio di autenticazione (in cui è installato IDS3) di avvio:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Map("/identity", idsrvApp =>
{
idsrvApp.UseIdentityServer(new IdentityServerOptions
{
SiteName = "Authentication Service - Embedded IdentityServer",
SigningCertificate = Certificate.LoadCertificate(),
Factory = new IdentityServerServiceFactory()
.UseInMemoryUsers(Users.Get())
.UseInMemoryClients(Clients.Get())
.UseInMemoryScopes(Scopes.Get())
});
});
}
}
Questo è UrlManager:
public static class UrlManager
{
public static string WebApplication
{
get { return "https://localhost:44381/"; }
}
public static string AuthenticationService
{
get { return "https://localhost:44329/"; }
}
}
Questo è il mio controller casa:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult Private()
{
return View((User as ClaimsPrincipal).Claims);
}
}
Quando accedo privato ottengo un 3 schermo Identity Server che mi dà il messaggio di errore 'L'applicazione client non è noto o non è autorizzata.'.
Ho letto che questo può derivare da corrispondenze errate negli URI di reindirizzamento, ma per quanto posso vedere le mie sono corrette. Non so cos'altro può causarlo. L'applicazione funziona perfettamente se cambio il flusso in implicito ma voglio implementare il flusso AuthorizationCode.
La documentazione non sembra fare luce neanche su questo.
Sarei interessato a come l'hai rettificato, se era il vero difetto. Saluti – Ian