現在

2017-03-02 6 views
0

実行時のWindows AzureのActive Directoryのベアラの認証を統合し、私は次のコードを使用して、私の.NETのWeb APIへのAzure Active Directoryを統合しています。
トークンを正しく取得でき、ユーザーは紺色のADアカウントを使用してログインできます。
しかし、web.configの設定を変更するのではなく、ユーザーが設定を変更し、UIによる空のログインを無効/有効にできるように、オーディエンスとテナントをデータベースに移動しました。アプリを初めて起動すると、ユーザーはまだ設定を入力していないため、データベースには設定がありません
現在

var azureSetting = db.GetAzureSetting(); 
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
    { 
     Audience = azureSetting.AzureClientId, 
     Tenant = azureSetting.AzureTenant 
    } 
}); 


上記のコードは、に変更されました。その後、ユーザーは紺色の設定画面に移動し、正しいクライアントID、テナント、クライアントシークレットを入力します。ユーザーはazure ADユーザーを使用してログインすることはできません。
誰も私のためにこの事件を説明できますか?
Web.configの代わりにdbにazure configを保存する方法はありますか?

+0

マルチテナントとしてAzure ADを設定し、データベースに保存されているテナントIDからトークンが来るかどうかを確認するカスタムロジックを追加してください。 –

+0

私の問題は、アプリケーション起動後にAzure設定を実行時に変更できますが、UseWindowsAzureActiveDirectoryBearerAuthenticationはユーザーからの変更。それでもStartUp.Auth.csの最初の設定を使用します –

+0

あなたの提案にサンプルを提供してください。 –

答えて

0

ウェブAPIが開始され、設定ランタイムを変更できない場合のポストのコードは、ユーザーが聴衆とテナントを動的に変更できるようにするには、自分でトークンの検証を処理できます。あなたがアクセストークンを取得し、あなたのAPIアプリの後にトークンを検証するためにJwtSecurityTokenHandlerを使用することができ、以下のコードは、あなたの参考のためにある:

public JwtSecurityToken Validate(string token) 
    { 
     string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"; 

     ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint); 

     OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result; 

     TokenValidationParameters validationParameters = new TokenValidationParameters 
     { 
      ValidateAudience = true, 
      ValidateIssuer = false, 
      ValidAudience = "https://testbasic1.onmicrosoft.com/TodoListService", //your value from database 


      IssuerSigningTokens = config.SigningTokens, 
      ValidateLifetime = false 
     }; 

     JwtSecurityTokenHandler tokendHandler = new JwtSecurityTokenHandler(); 

     SecurityToken jwt; 

     var result = tokendHandler.ValidateToken(token, validationParameters, out jwt); 

     return jwt as JwtSecurityToken; 
    } 

このハンドラでは、Azureのアクティブによって発行されたトークンを確保するためにトークンの署名を検証するのに役立ちますディレクトリ、またトークンの主張をビジネスロジックに基づいて検証します。シナリオでは、オーディエンスとテナントを確認する必要があります。

あなたのWeb APIアプリでは、あなたがGlobal.asaxの中でカスタムTokenValidationHandler登録することができ:

GlobalConfiguration.Configuration.MessageHandlers.Add(new TokenValidationHandler()); 

あなたは、コードサンプルについてhereをクリックすることができ、あなたはトークンがテナント-IDから来ているかどうかをチェックするようにコードを修正する可能性がありますデータベースに格納します。

+0

こんにちは、あなたのソリューションは、Azure Cloudを使用したログインの検証でうまく動作します。 しかし、私のアプリは、Azure Cloudとローカルアカウントの両方のログインをサポートしています。検証コードを追加すると、Azure Cloudとローカルログインの両方からすべてのトークンが検証されます。 Azure Cloudからのトークンだけにトークン検証を適用する方法はありますか? –

+0

アクセストークンの発行者であるazure ad 1.0をチェックすることができます。発行者はhttps:// sts.windows.net/{tenant}/のようになります。以下のコードを使用してアクセストークンから発行者を取得することができます:var jwtTokenClaims =新しいJwtSecurityToken(jwtToken); var issuer = jwtTokenClaims.Issuer; –

+0

それは動作します。どうもありがとうございます。 –