2017-09-11 53 views
5

Tôi đang viết một ứng dụng Angular 4 cần lấy một số dữ liệu từ Asp.Net WebApi. Chúng tôi đang sử dụng xác thực cửa sổ cho WebAPI và tôi tự hỏi làm cách nào tôi có thể chuyển danh tính cửa sổ của người dùng từ Ứng dụng góc của tôi sang WebApi. Tôi đã tìm thấy vài ví dụ liên quan đến việc lồng ghép ứng dụng của bạn với ứng dụng MVC nhưng tôi sẽ giữ giao diện người dùng khỏi MVC. Có cách nào để làm điều đó mà không cần thêm mvc .net vào trang web Angular của tôi?Xác thực Windows và ứng dụng Angular 4

+0

Có lẽ liên kết đó sẽ giúp bạn : https://stackoverflow.com/questions/41337145/how-can-i-get-and-post-an-action-using-angular-2-in-mvc/41341743#41341743 –

+0

Từ những gì tôi có thể thấy là họ đang sử dụng xác thực thông thường. Tôi muốn sử dụng Windows Authentication – AlexanderM

+0

@AlexanderM là câu hỏi này có được trả lời đúng không? Nếu có, vui lòng đánh dấu câu trả lời. – RayLoveless

Trả lời

2

Khi bạn gửi yêu cầu http của bạn từ góc để WebAPI của bạn, bạn cần phải sử dụng RequestOptions ({withCredentials = true})

Dưới đây là một dịch vụ bảo vệ mẫu mà các cuộc gọi một api

@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 || {}); 
    } 

} 

Đây là lớp auth

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

Nếu bạn đang sử dụng .net cốt lõi sau đó trong điều khiển WebAPI của bạn bây giờ bạn có thể truy cập this.User.Identity.IsAuthenticated

NB: Nếu bạn đang sử dụng ASP.Net Lõi 2.0 thì bạn cần phải làm theo các "Windows Authentication (HTTP.sys/IISIntegration)" phần đây https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x

Bạn cũng phải nhớ để kích hoạt Windows Xác thực trên máy chủ, ví dụ IIS hoặc IISExpress.

Bạn có thể sẽ cần phải kích hoạt CORS tài liệu ở đây là tốt: https://docs.microsoft.com/en-us/aspnet/core/security/cors

Nếu bạn nhận được lỗi xung quanh "kiểm tra preflight" sau đó bạn cũng sẽ cần phải kích hoạt Anonymous Access

+0

bạn đã nói trong câu trả lời của bạn "IIS hoặc IISExpress". Bạn đã thử IISExpress và nó đã hoạt động chưa? Bởi vì tôi có và tôi không thể làm cho nó hoạt động – Dan

+0

Có, cả hai đều sử dụng Chrome. Trình duyệt nào đã thử? –

+0

Chỉ Internet Explorer. Đó là trình duyệt chính cần được hỗ trợ. Tôi sẽ thử Chrome để xem nó có hoạt động không – Dan

Các vấn đề liên quan