2016-10-27 7 views
1

私はユーザーアカウントを使って登録やトークンなどを利用するWEB APIを持っています。 トークン(JWTベアラ)とアイデンティティの両方を使用して、すべてのエンドポイントを保護します。したがって、ユーザーは有効なトークンしか持っていませんが、ログインする必要があります。 [Authorize(Policy = "Bearer")]を使用するとトークン認証が取得され、[Authorize]を使用した場合、どのように両方を組み合わせることができますか?私は[認可(ポリシー= "ベアラー、アイデンティティ")](ロールのロジックに基づいて)を行うことができますが、私はポリシーが存在しないことを誤って取得します。 これを実装する方法はありますか?トークンとID認可をリソースに使用する方法は?

レポ:https://github.com/drakoumel/DatacircleAPI

答えて

2

私はトークンの認可を取得し、私が使用したときに[オーソライズ]私はアイデンティティの認証を取得し、どのように私は両方を組み合わせることができ、[承認(ポリシー=「ベアラを」)]でしょうか? [sic]

ActiveAuthenticationSchemesプロパティを設定します。コンマで区切られたスキーム名のリストを取ります。次に、Identityが使用するCookieミドルウェアとベアラ(トークン)ミドルウェアをアクティブ化する例を示します。

[Authorize(ActiveAuthenticationSchemes = "Bearer, Identity.Application")] 

ベアラとクッキーミドルウェアの両方が実行され、現在のユーザのアイデンティティを作成して追加する機会があります。

備考:

必要な認証方式を有効にすることができます。既定のスキーム名は、IdentityAuthenticationの名前空間にあります。例えば。

Microsoft.AspNetCore.Authentication.JwtBearer 
    .JwtBearerDefaults.AuthenticationScheme // "Bearer" 

Microsoft.AspNetCore.Identity 
    .IdentityCookieOptions.ApplicationCookie // "Identity.Application" 

... 

参照:

+0

うーん、私はラインを適用し、現在のトークンが無効であるが、(生涯無効)、それが正常に進行し、彼がログインしているため、ユーザーはリソースにアクセスできます。認証は通過するのですか? これは私のコントローラです(getUser())https://github.com/drakoumel/DatacircleAPI/blob/master/Controllers/AccountController.cs そして私のstartup.cs https://github.com/drakoumel/DatacircleAPI/ blob/master/Startup.cs – Drakoumel

+0

だから私は 情報を得る:Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware [7] ベアラは認証されていない。障害メッセージ:IDX10223:有効期間の検証に失敗しました。トークンは期限切れです。 および info:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware [3] HttpContext.Userは、authenticationScheme:Identity.ApplicationのAutomaticAuthenticationによってマージされました。 info:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware [8] AuthenticationScheme:Identity.Applicationが正常に認証されました。 – Drakoumel

+0

ドキュメントに基づいて、両方のポリシーに変更が加えられてユーザーが作成され、両方が合格する必要があることを強制できますか? – Drakoumel

関連する問題