2017-09-20 5 views
1

.NET Core 2.0を使用したAPIがあります。私はすでにJWTの役割を担当していますが、私は権限でそれを使用するように移動したいと思います。定義済みのアクセス許可リストがあり、そのアクセス許可に基づいて動的な役割を作成することです。.NET Core 2.0でJWTを使用したアクセス権に基づくリソースへのアクセス

ロールは動的なのでロールベースの認証を使用できないため、権限に基づいてユーザーを認証する必要があります。

静的なアクセス許可リストがあるとします。たとえば:

public class Role 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<RolePermission> Permissions { get; set; } 
    public bool Status { get; set; } 
} 

次のことができます。

  • は、すべての記事

は、今度は私が役割を持っているとしましょう、私の記事を見るビュー

  • ポスト
  • 編集投稿を作成します動的な役割を作成し、与えられたstatから権限のリストを選択するicサンプルリスト。

    • はポスト
    • 投稿を編集
    • ビューの作成

    私の考えは持っているすべての記事:

    は、今私は、この権限を持つ「管理者」と呼ばれる役割を作成したいですこのようなJWT:

    JWT例:

    { 
        "iat": 1416929061, 
        "jti": "802057ff9b5b4eb7fbb8856b6eb2cc5b", 
        "role": "Administrator", 
        "permissions": { 
        "posts": { 
         "actions": ["readall", "create", "edit"] 
        } 
        } 
    } 
    

    ここで、APIのリソースにアクセスするためのアクセス許可を確認したいだけです。

    唯一の解決策は、すべてのアクセス許可に対してポリシーを作成することですか?どうすればこれを達成できますか?

  • +0

    こんにちはマーティン。まず第一に、ブログの日付は非常に古いので、スコープレベルの承認を持つAPIに対する使用法は参考にならないと考えてください。 Auth0はこれを箱から出します。また、スコープをJWTアクセストークン(Idトークンではない)に適用する必要があります。まだ私があなたが達成しようとしていることを完全に理解しているか分からないのですか?特定のユーザー認証のために受け取ったJWTアクセストークンに一連のスコープを提供し、そのユーザーの一部の静的権限テーブルで発行されるスコープをベースにしたいとしますか? – arcseldon

    +0

    こんにちはarcseldon!お返事をありがとうございます。私の考えは、いくつかの静的な権限を持つことです。選択した権限(静的リストから)で動的役割を作成できます。たとえば、いくつかのアクセス許可:すべての投稿を表示する、自分の投稿のみを表示する、投稿を追加する、投稿を削除する、などなど。 –

    +0

    スコープを認証時にダイナミックに割り当てることは簡単です。スコープをキー入力することはまだ不明です。私はあなたが実際に "スコープ"を意味する "権限"を参照していると思います。動的ロールに関する意味はまだ不明です。ユーザーのロールが頻繁に変更されることを示唆していますか? – arcseldon

    答えて

    0

    現在の質問に基づいて、Auth0ダッシュボードにAPIをセットアップする必要があると思います。docs hereを参照してください。次に、必要に応じてAPIにデフォルトのスコープを定義することができます。

    所属するロールに従って特定のユーザー認証に実際に適用されるスコープに影響を与えるために、Auth0ダッシュボードでルールを定義できます。ここでは本当に簡単な例です:

    function (user, context, callback) { 
    
        user.app_metadata = user.app_metadata || {}; 
    
        if (user.app_metadata.role === "Administrator") { 
        context.accessToken.scope = 'openid read:posts create:posts edit:posts'; 
        } else if (user.app_metadata.role === "User") { 
         // define likewise as needed.. 
        } 
    
        callback(null, user, context); 
    } 
    

    role静的ユーザープロファイルに適用される、または動的などを見上げたかどうかは、それほど明確であり、あなたの要件に依存します。これを設定している場合しかし、あなたは(ユーザ認証がAdministrator役割を持っていた状況については、以下。

    enter image description here

    あなたは、あなたの.NETを確保できるようなものを含むペイロードを持つJWTのアクセストークンを受け取る必要がありますAPIを使用していない場合、理論的には、代わりにIDトークンを使用することができます(アプリケーション自体がコンシューマであるため)。しかし、私はいくつかのAPIに対する要求を承認したいという理解に基づいています...?

    +0

    Arcseldon、ありがとうございますが、私は外部APIを使用していません。私は自分の論理を使っています。 –

    +0

    まあ、とても古い学校のアプローチ - これは何かのようなものでした - https://github.com/auth0-samples/auth0-spring-security-mvc-sso-sample/tree/master/app1-portal#add-role auth0-rule-by-auth0-ruleを作成すると、ルールはユーザープロファイルを更新します。次に、コード許可許可フローおよび/ userInfoエンドポイントを使用して、アクセス許可をプルダウンできます。 – arcseldon

    +0

    私はAuth0を使用していません。私は自分の実装でJWTを使用しています。 –

    関連する問題