2016-08-22 25 views
0

セットアップ:いつASP.NETコアクレームがHttpContext.User.Claims経由でアクセス可能になるのですか?

  1. 請求の束とClaimsPrincipalを作成します。
  2. コールhttpContext.Authentication.SignInAsync("MyAuthScheme", myClaimsPrincipal, myAuthProperties)
  3. すべてのクレームを通してすべての特許請求の範囲を反復しようとする。

結果:PTから

主張。 1はhttpContext.User.Claims -collectionにありません。

なぜですか?

EDIT:

var claims = GetPersistentClaims(username.ToLowerInvariant()); 
var identity = new ClaimsIdentity(claims, AuthenticationScheme); 
var principal = new ClaimsPrincipal(identity); 
var authenticationManager = _httpContextAccessor.HttpContext.Authentication; 
var properties = new AuthenticationProperties {IsPersistent = isPersistent}; 
await authenticationManager.SignInAsync(AuthenticationScheme, principal, properties); 
// This is where I inspect _httpContextAccessor.HttpContext.User.Claims. 
+0

'httpContext.User.Identity.IsAuthenticated'の値は何ですか? –

+0

@caglinそれは 'false'です。 – Uli

+0

どこで 'httpContext.User.Claims'を何回繰り返すのですか?可能であれば、コードを投稿できますか? –

答えて

0

あなたがSignInAsyncを呼び出すと、認証ハンドラの呼び出しがSignInAsync()を所有しています。あなたの場合、それはクッキー認証です(クッキーを設定するだけです)。

ユーザを認証する場合は、authenticationManager.AuthenticateAsync(AuthenticationScheme);に電話する必要があります。

編集

現在のリクエストにはクッキーが存在しないので、それはSignInAsync後に動作しませんでした。しかし、HttpContext.User = principal ;が解決策になるかもしれません。

ps:通常、次のリクエストにクレームを使用します。

+0

申し訳ありませんが、動作しませんでした。 –

+0

ええ、同じことをやってみましたが、これはBeta 8とRC1で動作しましたが、もはやそれはありません。挫折。 – Uli

+0

ご協力いただきありがとうございます。私はこれを "変更され、文書化されていない別のもの"に捨てなければならないと思う。 – Uli

関連する問題