0

現在、IdentitServer4とWebApiのdotnetcoreアプリケーションで動作するAngular4 UIを含むWebアプリケーションを開発中です。私のWebApiからIDにクレームを追加する

私たちはIDSで動作するアプリケーション認証メカニズムを持っていますが、ユーザーが許可した権限に基づいてAngularアプリケーションの一部を制限したいと考えています。この情報はWebApiの背後に保存されています。これらの権限は、ユーザーが特定の操作を実行できない場合、つまり編集ユーザーがWebApiを停止しないようにするためにも使用されます。

私が直面している問題は、IdentityServerの認証後、理想的にはAngularアプリケーションが許可された 権限のリストを取得し、そこからクレームの一部としてWebApiに送信することです。その理由は、特定のユーザーが特定のコントローラー操作にアクセスできるかどうかを確認するのに役立つ場合は、各Apiコールでデータベース を照会する必要がないためです。

APIへの後続の呼び出しにこれらのクレームが含まれるようにこれらのクレームを設定することはできますか?そこから、ユーザー権利ID のクレーム情報を確認してリソースへのアクセスを確認できますか?

答えて

0

あなたは一例

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
{ 
    Authority = "https://demo.identityserver.io", 
    ApiName = "api1", 

    AllowedScopes = { "api1.read", "api1.write" } 

    AutomaticAuthenticate = true, 
    AutomaticChallenge = true 
}); 

のためにあなたのWEBAPI(official docs)にスコープを追加することができますし、などのクライアントアプリケーションにクレームを追加することができますごとのアクセス権を割り当てるため、

var mvcClient = new Client 
{ 
    ClientId = "mvc", 
    ClientName = "MVC Client", 
    ClientUri = "http://identityserver.io", 

    AllowedGrantTypes = GrantTypes.Hybrid, 
    AllowOfflineAccess = true, 
    ClientSecrets = { new Secret("secret".Sha256()) }, 

    RedirectUris =   { "http://localhost:5002/signin-oidc" }, 
    PostLogoutRedirectUris = { "http://localhost:5002/" }, 
    LogoutUri =    "http://localhost:5002/signout-oidc", 

    AllowedScopes = 
    { 
     IdentityServerConstants.StandardScopes.OpenId, 
     IdentityServerConstants.StandardScopes.Profile, 
     IdentityServerConstants.StandardScopes.Email, 

     "api1", "api2.read" 
    }, 
}; 

これは、アプリケーションベースユーザーのスコープ内に役割を定義して、その役割を持つコントローラまたはメソッドを装飾することができます。例:

For admin: new Claim("role","Admin") 
For guestuser: new Claim("role","guest") 


[HttpGet] 
    [Authorize(Roles = "Admin")] 
    public IActionResult Edit() 
    { 
     //whatever 
    } 

    [Authorize(Roles = "Guest")] 
    [HttpGet] 
    public IActionResult View() 
    { 
     //whatever 
    } 
+0

本当にありがとうございますが、権限は自分のIDサーバーではなくWebApiプロジェクトに保存されます。そのため、ユーザーはユーザーコントローラとスペースコントローラにアクセスできますが、それはwebApiで管理されます – dreza

関連する問題