2017-09-11 3 views
5

Ich schreibe eine Angular 4-Anwendung, die einige Daten von Asp.Net WebApi erhalten muss. Wir verwenden die Windows-Authentifizierung für die WebAPI und ich frage mich, wie ich die Windows-Identität des Benutzers von meiner Angular Application an WebApi übergeben kann. Ich habe einige Beispiele gefunden, die eine Verschachtelung Ihrer Anwendung mit einer MVC-Anwendung beinhalten, aber ich möchte die Benutzeroberfläche von MVC fernhalten. Gibt es eine Möglichkeit, dies zu tun, ohne dass .net mvc zu meiner Angular-Website hinzugefügt wird?Windows-Authentifizierung und Angular 4-Anwendung

+0

Vielleicht aktivieren müssen helfen : https://stackoverflow.com/questions/41337145/how-can-i-get-and-post-an-action-using-angular-2-in-mvc/41341743#41341743 –

+0

Von was ich sehen kann, ist das Sie verwenden die reguläre Authentifizierung. Ich möchte Windows-Authentifizierung verwenden – AlexanderM

+0

@AlexanderM wurde diese Frage richtig beantwortet? Wenn ja, bitte die Antwort markieren. – RayLoveless

Antwort

2

Wenn Sie Ihre HTTP-Anforderung von Angular zu Ihrem WebAPI senden müssen Sie RequestOptions verwenden ({withCredentials = true})

Hier ist ein Beispiel Sicherheitsdienst ist, dass eine API-Aufrufe

@Injectable() 
export class SecurityService { 
private baseUrl = 'http://localhost:64706/api/security/'; 
private auth: Auth; 
private options = new RequestOptions({ withCredentials: true }); 

constructor(private http: Http) { 
    console.log('Creating Service'); 

    console.log('Service Pre Http'); 

    this.http.get(this.baseUrl, this.options) 
     .map((res) => this.extractData<Auth>(res))  
     .subscribe(newItem => { 
     console.log('Service Subscribe'); 
     this.auth = newItem; 
     }) 

    } 

    public isUser(): Observable<boolean> | boolean { 

    if (!this.auth) { 
     return this.http.get(this.baseUrl, this.options) 
     .map(res => { 
      this.auth = this.extractData<Auth>(res); 
      return this.auth.isUser; 
     }); 
    } 
    else { 
     return this.auth.isUser; 
    } 


    } 

    private extractData<T>(res: Response) { 
    if (res.status < 200 || res.status >= 300) { 
     throw new Error('Bad response status: ' + res.status); 
    } 
    const body = res.json ? res.json() : null; 
    return <T>(body || {}); 
    } 

} 

Dies ist die auth-Klasse

export class Auth { 
    isAdmin: boolean; 
    isUser: boolean; 
} 

Wenn Sie .net Kern dann in Ihrem WebAPI-Controller verwenden Sie jetzt zugreifen können this.User.Identity.IsAuthenticated

NB: Wenn Sie ASP.Net-Core 2.0 verwenden, dann müssen Sie die "Windows-Authentifizierung (HTTP.sys/IISIntegration)" Abschnitt hier folgen https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x

Sie müssen auch die Windows erinnern zu ermöglichen Authentifizierung auf dem Host, zB IIS oder IISExpress.

Sie müssen wahrscheinlich CORS die Dokumentation hier ermöglichen, ist gut: https://docs.microsoft.com/en-us/aspnet/core/security/cors

Wenn Sie Fehler um „Preflight“ erhalten, dann werden Sie auch, dass Link gelangen Sie Anonymous Access

+0

haben Sie in Ihrer Antwort "IIS oder IISExpress" gesagt. Hast du IISExpress ausprobiert und es hat funktioniert? Weil ich habe und ich kann es nicht funktionieren – Dan

+0

Ja, beide arbeiten mit Chrome. Welche Browser haben es versucht? –

+0

Nur Internet Explorer. Das ist der Hauptbrowser, der unterstützt werden muss. Ich werde Chrome ausprobieren, um zu sehen, ob es funktioniert – Dan