2017-12-15 4 views
0

さまざまなサイトからAPIにアクセスできるようにする。これは持っていた:.Net core2 CORS - SetIsOriginAllowedの仕組みは?

services 
    .AddCors(options => 
    { 
     options.AddPolicy(PolicyName, builder => 
     { 
      builder 
       .SetIsOriginAllowedToAllowWildcardSubdomains() 
       .WithOrigins(
        "http://*.my-api.com", 
        "http://*.my-api.service" 
       ) 
... 

これはhttpSを許可していないようです、または私がリクエストでポートを指定しているようです。

例: https://www.my-api.com:3000

思想は)(SetIsOriginAllowedでWithOriginsを置き換えることができ

services 
    .AddCors(options => 
    { 
     options.AddPolicy(PolicyName, builder => 
     { 
      builder 
       .SetIsOriginAllowed(IsOriginAllowed) 
IsOriginAllowed機能は次のように定義されて

private static bool IsOriginAllowed(string host) 
{ 
    var corsOriginAllowed = new[] { "my-api.com", "my-api.service" }; 

    return corsOriginAllowed.Any(origin => 
     Regex.IsMatch(host, [email protected]"^http(s)?://.*{origin}(:[0-9]+)?$", RegexOptions.IgnoreCase)); 
} 

が、これはでは動作しません。すべて、正規表現さえも真実に戻っています。

誰もが、これは動作しませんし、私の(HTTPSを許可HTTPSと異なるポートで()WithOrigins内のすべてのドメインを複製する以外にも正しい方法を示すことができる理由を知っています。

おかげ

答えて

0

SetIsOriginAllowedを( )はうまく動作しませんが、Postmanとのテストでは、サーバーから返されたヘッダーは気にしませんでした.Corsヘッダーを適用するのはブラウザです。

テストサイト下のjavascript

ドメインは、ドメインリストのブラウザ表示を許可するためにテストドメインを追加した後、リストのブラウザはAPI

Domain not allowed

から返された値は表示されません許可CORSに含まれていません

<html> 
 
    <script> 
 
     fetch('http://test.com:5000/v2/campaign/hallo3').then(function(response) { 
 
      return response.json(); 
 
     }).then(function(j) {    
 
\t   alert(JSON.stringify(j)); 
 
     }); 
 
    </script> 
 
</html>

データを取得してコンテンツを取得するCorsヘッダー

enter image description here

もう1つの問題は、SetIsOriginAllowed()サーバーが 'Vary'ヘッダーを送信していないという問題でした。両方を設定しなければならなかった:

.SetIsOriginAllowed(IsOriginAllowed) 
.WithOrigins(corsOriginAllowed)