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
Antwort
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
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
Ja, beide arbeiten mit Chrome. Welche Browser haben es versucht? –
Nur Internet Explorer. Das ist der Hauptbrowser, der unterstützt werden muss. Ich werde Chrome ausprobieren, um zu sehen, ob es funktioniert – Dan
- 1. Angular-cli, PrimeNG und angular-cli
- 2. Angular 2 und Angular 4 Abhängigkeitsfehler
- 3. Redux und Angular 2
- 4. Angular 2 und i18n
- 5. Angular 2 und RxJS
- 6. Recurly.js und Angular 4
- 7. Angular 4 und Tokens
- 8. Angular 5 und NPM
- 9. ANGULAR JS und React
- 10. Angular 2 und Jasmine
- 11. Angular $ http und PHP
- 12. Angular und i18next
- 13. Angular - Websocket und $ rootScope.apply()
- 14. Angular Dart und Formularvalidierung
- 15. Angular und RxJS Importe
- 16. Angular HttpClient und Services
- 17. Async.js und Angular 2
- 18. NGINX und Angular 2
- 19. Elasticsearch und Angular 2
- 20. Angular 4 und Armaturenbrett
- 21. Angular Direktiven und Routing
- 22. Angular JS und Partials
- 23. Angular cli und webpack
- 24. Angular und WebAPI Konfiguration
- 25. Angular Firebase und AngularFireDatabase
- 26. Angular 2 und SignalR
- 27. Heroku und Angular routing
- 28. Angular 2 und EventEmitter
- 29. Angular Provider und $ http
- 30. Angular 2 und stripe.js
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 –
Von was ich sehen kann, ist das Sie verwenden die reguläre Authentifizierung. Ich möchte Windows-Authentifizierung verwenden – AlexanderM
@AlexanderM wurde diese Frage richtig beantwortet? Wenn ja, bitte die Antwort markieren. – RayLoveless