web-dev-qa-db-ja.com

Windows認証およびAngular 4アプリケーション

Asp.Net WebApiからデータを取得する必要があるAngular 4アプリケーションを作成しています。WebAPIにWindows認証を使用しているため、=からユーザーのWindows IDをどのように渡すことができますかAngular WebApiへのアプリケーション。MVCアプリケーションでアプリケーションをネストすることを含むいくつかの例を見つけましたが、UIをMVCから遠ざけたいと思います。netmvcを追加せずにそれを行う方法はありますかto my Angular website?

10
AlexanderM

Angular=からWebAPIにhttpリクエストを送信する場合、RequestOptions({withCredentials = true})を使用する必要があります

これは、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 || {});
  }

}

これは認証クラスです

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

.net Coreを使用している場合、WebAPI Controllerでthis.User.Identity.IsAuthenticated

NB:ASP.Net Core 2.0を使用している場合は、ここで「Windows認証(HTTP.sys/IISIntegration)」セクションに従う必要があります- https://docs.Microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x

また、ホストでWindows認証を有効にすることも忘れないでください。例IISまたはIISExpress。

CORSを有効にする必要があります。ここでのドキュメントは適切です。 https://docs.Microsoft.com/en-us/aspnet/core/security/cors

「プリフライトチェック」に関するエラーが発生した場合は、匿名アクセスも有効にする必要があります。

5
Stephen James