2017-09-28 1 views
0

Ich versuche, ein lokales Login-Formular zu verwenden, um Benutzeranmeldeinformationen für seinen externen Provider (Azure Active Directory) zu authentifizieren.IdentityServer4 - Ist es möglich, ein lokales Login-Formular mit einem externen Provider zu verwenden und keine Rundreise?

Ich verstehe, dass Sie pro Client lokale Anmeldung aktivieren können. Das hilft, wenn ich auf "True" gesetzt habe, erhalte ich das lokale Login-Formular, aber ich bin mir immer noch nicht sicher, wie ich die Middleware für diesen externen Provider abfeuern soll. Gibt es eine Möglichkeit, Client-Anmeldeinformationen an den externen Anbieter zu senden, um ein ID-Token zu erhalten? Mein aktueller Code leitet zum Microsoft-Login um. und dann zurück zu meinem Identitätsserver und dann zur Client-Anwendung. Ich möchte, dass sich der Benutzer über den Identitätsserver anmeldet, aber nicht, dass er sich wirklich gegen Azure authentifiziert.

Hier ist mein Start:

 var schemeName = "Azure-AD"; 
     var dataProtectionProvibder = app.ApplicationServices.GetRequiredService<IDataProtectionProvider>(); 
     var distributedCache = app.ApplicationServices.GetRequiredService<IDistributedCache>(); 
     var dataProtector = dataProtectionProvider.CreateProtector(
      typeof(OpenIdConnectMiddleware).FullName, 
      typeof(string).FullName, schemeName, 
      "v1"); 
     var dataFormat = new CachedPropertiesDataFormat(distributedCache, dataProtector); 

     /// 
     /// Azure AD Configuration 
     /// 
     var clientId = Configuration["AzureActiveDirectory:ClientId"]; 
     var tenantId = Configuration["AzureActiveDirectory:TenantId"]; 
     Redirect = Configuration["AzureActiveDirectory:TenantId"]; 

     app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
     { 
      AuthenticationScheme = schemeName, 
      DisplayName = "Azure-AD", 
      SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme, 
      ClientId = clientId, 
      Authority = $"https://login.microsoftonline.com/{tenantId}", 
      ResponseType = OpenIdConnectResponseType.IdToken, 
      StateDataFormat = dataFormat, 
     }); 

     app.UseIdentity(); 
     app.UseStaticFiles(); 
     app.UseMvcWithDefaultRoute(); 

Dies ist die Login ist.

[HttpGet] 
public async Task<IActionResult> ExternalLogin(string provider, string returnUrl) 
{ 
    var context = this.HttpContext.Authentication; 
    List<AuthenticationDescription> schemes = context.GetAuthenticationSchemes().ToList(); 

    returnUrl = Url.Action("ExternalLoginCallback", new { returnUrl = returnUrl }); 

    // start challenge and roundtrip the return URL 
    var props = new AuthenticationProperties 
    { 
     RedirectUri = returnUrl, 
     Items = { { "scheme", provider } } 
    }; 

    //await HttpContext.Authentication.ChallengeAsync(provider, props); 

    return new ChallengeResult(provider, props);   
} 

Antwort

0

Meiner Meinung nach sollten wir von anderen IDP azur AD für die Authentifizierung als Sicherheitsimplementierung nicht direkt direkt den Benutzernamen/Passwort passieren .Und auch Azure AD unterstützt die Ressourceneigentümer Passwort Credentials Grant, es ist nur verfügbar im nativen Client. Ich schlage vor, Sie behalten den normalen Weg und vermischen sie nicht.

+0

Okay, danke. Das habe ich mir schon gedacht. –

Verwandte Themen