2017-06-06 3 views

Antwort

1

Die bessere Frage ist how to customize the login screen? the documentation on customizing views

Die Ansichten in IdentityServer sehen kann in einem von zwei Arten angepasst werden: 1) das HTML-Templates durch die DefaultViewService vorgesehen anpassen, oder wenn mehr Kontrolle 2 erforderlich) definieren, einen benutzerdefinierten IViewService

eine benutzerdefinierte Implement IViewService zu change the full layout. Wenn Sie nur die Anmeldeseite ändern möchten, fügen Sie Ihr benutzerdefiniertes HTML hinzu, das die gleiche eckige Logik wie das existing login page implementiert und es einem Ordner mit dem Namen mit dem Dateinamen _login.html hinzufügt. Wenn Sie die layout (die Header) ändern möchten, müssen Sie dieses Mal die Datei _Layout.html benennen. Dies ist alles in der documentation erläutert, mit den oben aufgeführten als "Teilansichten ersetzen". Diese

1

ist, wie ich es tat, ohne IViewService mit

recaptcha Skripte auf die Vorlagen/_layout.html head-Tag

<script src='https://www.google.com/recaptcha/api.js'></script> 

hinzufügen Schnipsel hinzufügen Bildschirmseite in Templates/_login.html einzuloggen, mit hinzugefügt Namen "g-recaptcha-Antwort" Attribut

<div class="g-recaptcha" name="g-recaptcha-response" data-sitekey="your sitekey"></div> 

CspOptions t = hinzufügen o der Startklasse google Skript

CspOptions = new CspOptions 
{ 
    Enabled = true, 
    FontSrc = "'self' data: fonts.gstatic.com", 
    StyleSrc = "'self' 'unsafe-inline' fonts.googleapis.com", 
    ScriptSrc = "'self' https://www.google.com https://www.gstatic.com; object-src 'self'", 
    FrameSrc = "https://www.google.com" 
} 

Inject OwinEnvironmentService auf die Userservice-Klasse zu ermöglichen - Damit können Sie das Token aus dem reCaptcha

private readonly OwinEnvironmentService _environmentService; 

public UserService(OwinEnvironmentService environmentService) 
{ 
    _environmentService = environmentService; 
} 

Bei AuthenticateLocalAsync Snippet packen, das Token packen und es überprüfen

var gReCaptchaResponse = _environmentService.GetLoginInput("g-recaptcha-response"); 
var client = new RestClient("https://www.google.com"); 
var request = new RestRequest("recaptcha/api/siteverify", Method.POST) { RequestFormat = DataFormat.Json }; 
request.AddParameter("secret", "YOUR SECRET"); 
request.AddParameter("response", gReCaptchaResponse); 
var response = client.Execute(request); 
var verficationStatus = JsonConvert.DeserializeObject<GReCaptcha>(response.Content); 

if(!verficationStatus.Success) 
{ 
    Logger.Warn("Captcha invalid"); 
    context.AuthenticateResult = new AuthenticateResult("Please verify that you are not a robot"); 
    return Task.FromResult(0); 
} 

GetLoginInput (Formulareingabename) Verlängerung (Kredit an martinip86 von der Antwort im Github

public static string GetLoginInput(this OwinEnvironmentService environmentService, string fieldName) 
{ 
    const string body = "owin.RequestBody"; 
    if (!environmentService.Environment.Keys.Contains(body)) 
     return null; 

    var owinFormData = environmentService.Environment[body] as System.IO.Stream; 
    if (owinFormData == null) 
     return null; 

    var formData = string.Empty; 
    using (var sr = new System.IO.StreamReader(owinFormData)) 
    { 
     formData = sr.ReadToEnd(); 
    } 

    if (string.IsNullOrWhiteSpace(formData)) 
     return null; 

    var formDataParsed = HttpUtility.ParseQueryString(formData); 
    return formDataParsed[fieldName]; 
}