2017-07-11 39 views
3

私はAsp.Netコアを使用する準備ができましたが、ここで私がしていることがあります。 MVC 5では、ユーザーの役割を決定するために何かをしているところで、クレームを作成するためにPostAuthenticateイベントを処理しているHttpモジュールがあります。コアでこれと同じことをする方法はありません。これはWindows認証を使用しているため、処理するログインメソッドがないことに注意してください。Asp.NetコアでPost Authenticateを処理する必要があります

私はユーザーのためにいくつかのものを初期化したいので、PostAuthenticateにフックアップする現在のhttpModuleから。
context.PostAuthenticateRequest + = Context_PostAuthenticateRequest;

httpModulesはもはやCoreには存在せず、それはミドルウェアに移されていることに注意してください。私はそこからそのイベントにアクセスする方法はわかりません。

答えて

0

Windows認証は、アプリケーションパイプラインの開始時にホスト(IISまたはHttpSys/WebListener)によって実行されます。パイプラインの最初のミドルウェアはこの場合はPostAuthenticateRequestに相当します。 HttpContext.Userで操作してください。

1

私はこれを今日初めて行いました。 2つの基本ステップ

最初に: IClaimsTransformerインターフェイスを実装するクラスを作成します。

public class MyTransformer : IClaimsTransformer 
{ 
    public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context) 
    { 
     //don't run if user isn't logged in 
     if(context.Principal.Identity.IsAuthenticated) 
     { 
      ((ClaimsIdentity)context.Principal.Identity)?.AddClaims(...); 
     } 
    } 
    return Task.FromResult(context.Principal); 
} 

第二: あなたがいる場合、セッションまたはキャッシュを使用してに見たいと思うかもしれませんので、TransformAsyncはリクエストごとに実行しようとしていることを覚えておいてください

public void Configure(IApplicationBuilder app, ..., ...) 
{ 
    //app.Use...Authentication stuff above, for example 
    app.UseOpenIdConnectAuthentication(new OpenIdOptions 
    { 
     //or however you like to do this. 
    }); 

    app.UseClaimsTransformation(o => new MyTransformer().TransformAsync(o)); 
    //UseMvc below 
    app.UseMvc(...); 
} 

にStartup.csに次の行を追加します。あなたはそれを使ってデータベースを打っています。

+0

すべてのリクエストでトランスフォーマーが呼び出されていますか?私はそれをポストログオン、またはオンデマンドのみと呼んでいます。古い.netにはOpenIdConnectAuthenticationOptions.OpenIdConnectAuthenticationNotifications.SecurityTokenValidated ...どこに行ったのか不思議でした。 THANKS – Whoever

+0

まだ試したことはありませんが、OpenIdOptionsイベント=新しいOpenIdeConnectEvents {}を設定することを検討していますが、どちらを使用するのかわからない場合や、要求間の要求が持続するかどうかはわかりません。今すぐ私は自分のカスタムクレームをシリアル化して保存していますし、セッションデータに格納しておくと、リクエストが来るまでにデータベースにアクセスすることを避けることができます – stiljack

+0

迅速なフォローアップをありがとう。セッション変数varを使用すると、情報の一部にトークンが含まれている可能性があるため、APIインターフェイスの設計方法に影響を与える可能性があります。私はIdentityServer3と良いn 'old .netでそれをすべて理解しました。今は.NETの3つの異なるバージョンがあり、それぞれ次のバージョンと互換性がありません。 – Whoever

関連する問題