2016-06-06 47 views
5

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.

risposta

8

Il client è stato configurato per il codice di autorizzazione flusso

flusso = Flows.AuthorizationCode

Ma il tipo di risposta in avvio è impostato il flusso ibrido.

ResponseType = "Codice id_token"

provare a cambiare questo per

ResponseType = "code" (o modificare il tipo di flusso di Hybrid)

Di seguito è l'elenco di ResponseType e il flusso corrispondente enter image description here

0

Ho ricevuto questo errore e il problema era RedirectUri. nel server di autorizzazione era http://localhost:56840/ e nell'app Web era http://localhost:56840. Nota "/" mancante alla fine dell'URL.

+0

Sarei interessato a come l'hai rettificato, se era il vero difetto. Saluti – Ian