2017-09-25 3 views
0

Je construis une application web avec angulaire 4 qui essaie de POST à ​​l'API Rest VSTS. Je ne possède évidemment pas le service et je suis en train de courir en direct dans Azure et pas localement (je comprends que je peux désactiver CORS en chrome pour les tests locaux).angulaire 4 Front End hébergé sur Azure CORS Problème

Failed to load 
https://app.vssps.visualstudio.com/oauth2/tokenRemovedtoStackOverflow 
Response to preflight request doesn't pass access control check: No 'Access- 
Control-Allow-Origin' header is present on the requested resource. Origin 
'https://blah.azurewebsites.net' is therefore not allowed access. The 
response had HTTP status code 400. 

appel est essentiellement:

private _appID = blah; 
private _tokenRequest = 'client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}'; 
    private _returnURI = 'https://blah.azurewebsites.net/'; 
    private headers = new Headers(
    { 
     'Access-Control-Allow-Origin': '*', 
     'Access-Control-Allow-Headers': 'Content-type', 
     'Content-Type': 'application/x-www-form-urlencoded', 
    }); 

    constructor(private http: Http) { } 

    getAccessToken(code: string): Observable<IToken> { 
    const _url = 'https://app.vssps.visualstudio.com/oauth2/' + code; 
     const body = 'client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion=' + 
     this._appID + 
     '&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=' + 
     code + '&redirect_uri=' + 
     this._returnURI; 
    const options = new RequestOptions(); 
    options.headers = this.headers; 

     return this.http 
     .post(_url, body, options) 
     .map((response: Response) => <IToken[]> response.json()) 
     .do(data => console.log('All: ' + JSON.stringify(data))) 
     .catch(this.handleError); 

Actuellement je n'ai aucun serveur/api (AKA la seule chose dans ma source est angulaire) et il est juste en cours d'exécution sur tout serveur web app Azure fournit.

est mon seul choix pour se déplacer CORS l'ajout d'un serveur nodejs d'accueillir ce d'azur?

Répondre

2

Access-Control-Allow-Origin et Access-Control-Allow-Headers sont réponse en-têtes. Ils n'ont pas de place sur votre demande.

Ajout d'en-têtes de mesure est l'un des déclencheurs de la demande de contrôle en amont d'options qui génère l'erreur 400.

Leur suppression devrait provoquer la demande d'être une simple demande et peuvent être autorisés par le service.

A défaut: Oui, vous avez besoin de changer l'hôte afin qu'il vous accorde la permission.