2017-01-25 22 views
0

Web APIエンドポイントを設定して、IdentityServerからの異なる許可タイプを使用するにはどうすればよいですか?Web APIエンドポイントごとに異なるフロー

今私はスタートアップのために持っているのです。

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions() 
{ 
    Authority = "http://localhost:5000", 
    RequiredScopes = new[] { "public", "read", "write" } 
}); 

コントローラー:クライアントのフローエンドポイントならば、それは意味がありませんので、

// Assuming to access this endpoint you need to have client id/secret (client credential flow) 
public IEnumerable<string> Get() 
{ 
    return new string[] { "value1", "value2" }; 
} 

// Assuming to access this endpoint you need to have username/password (password flow) 
[ResourceAuthorization("read")] 
public string Get(int id) 
{ 
    return "value"; 
} 

もちろん一方のエンドポイントは、唯一の許可タイプを持つことができますパスワードの流れも許可されます。

これは悪い構造ですか?

パブリックAPI(認証情報フロー)、パスワードフローエンドポイント、および内部エンドポイント(企業のインフラストラクチャに公開しない)を別のプロジェクトに分けるだけでよいですか?

異なるエンドポイントのスコープを指定する方法を教えてください。 (例えば、1つのエンドポイントは公開が必要であり、1つは読まなければならない)

答えて

0

これは非常に悪いことです。あなたは認証フローの問題をあなたのAPIと結びつけています。クライアントごとに異なるスコープを定義し、それらのスコープを使用して、どのクライアントがどのリソースを使用できるかを制限します。範囲に基づいてクレームベースの承認を行うことができます。 thisを確認してください。

+0

しかし、クライアントがクライアントフローを使用して認証された場合はどうなりますか? ResourceAuthorizationは引き続き機能しますか? – gnaungayan

+0

私が理解したように、ユーザがパスワードログインを使用してログインしていることを意味するユーザがいる場合は、ResourceAuthorizationを使用し、ユーザが関与していない場合はScopeAuthorizationを使用する必要があります。 ScopeAuthorizationを見ると、以前のものを使用すべきかどうかは非難されました。 – gnaungayan

+0

^https://speakerdeck.com/leastprivilege/web-api-authorization-and-access-control-done-right-ndc-oslo-2014?slide=43 – gnaungayan

関連する問題