2017-02-08 5 views
2

Angular 2アプリケーションでKerberosを使用することはできますか?私たちは、RESTサービスをホストするSpringを使用しています。また、Kerberosを使用してAngular 2リソースを保護しています。役割を追加し、特定の役割に対してAngular2アプリケーションの機能を利用できるかどうかを定義します。ほとんどの人がJWTやOAuthを使い始めたようだから、これをどうやって行うのかに関する情報はほとんどないようです。角度2とスプリングKerberos

初期認証にKerberosを使用して、ブラウザに送り返されるJWTを生成することは可能でしょうか?

現時点では、自分の権限を含む現在ログインしているユーザーに関するすべての情報を返すRESTエンドポイント/ユーザーの設定について考えています。 Angularでは、これらの権限を読み取り、それに応じてUIとルートを操作できます。サーバーからのデータは、すでにKerberosとSpringによって保護されています。したがって、ユーザーがローカルAngularを変更して保護されたルートの一部を訪問することができれば、データは表示されません。

答えて

0

あなたが言ったことは間違いありません。 Kerberos、OAuthなどのバックエンドを通じて認証を処理する必要があります。ログインに成功すると、バックエンドはメタデータ応答を返し、UIが適切に構成できるようにします。バックエンドは保護されたリソースの場所なので、UIは実際には「保護」される必要はありませんが、特定のユーザーに適した「動的に構成された」ほどです。

どのようにしたいのか、ほとんどのロジックを書きたいのかを決めなければなりません。たとえば、バックエンドは役割や経験の識別子(管理者、ユーザー、ゲストなど)と同じように単純なものを返すことができます。 UIは、そこから、どのアクティビティが実行されるべきか、どのリソースが利用可能であるか等を知ることができる。例えば、ゲストは新しいユーザを追加することができないが、ゲストは好奇心を得ることができるので、バックエンドが実際にユーザーアカウントを変更することを許可していないということです。

0

これは、JWTトークンの完全な使用例です。サーバーエンドで認証されると、バックエンドサービスは特定のユーザーの役割を持つJWTトークンを作成し、これをAngular2アプリケーションに戻すことができます。角型アプリは、ユーザーの役割に応じてUIを構成できます。すべての連続したサーバー呼び出しで角度アプリはこのトークンを返信できるので、このトークンを使用してユーザーの役割を見つけることができます。 Springセキュリティでは、トークンを検証するために使用できる認証の前にカスタムフィルタを追加できます。

@Configuration 
public class WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.addFilterAfter(new TokenFilter(), BasicAuthenticationFilter.class); 
    } 
} 

TokenFilter内部JWTのトークンは、ユーザーの役割を見つけ、特定の保護されたリソースへのアクセスを可能にするために解析することができます。誰かがトークンを変更しようとするか、または禁止された保護リソースを要求した場合、JWTトークンの検証は失敗します。バックエンド側の認証技術の

public class TokenFilter extends GenericFilterBean { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { 
     // Validate Token her for the requested url 
     if(validateToken(request.getHeader("auth")){ 
      chain.doFilter(request, response); 
     }else{ 
      // return 403 response 
    } 
} 
0

あなたの選択は、それがOAuthを、JWT、ケルベロス、またはカスタムメイドのものに、多くのフロントエンド側で、あなたの決定に影響を与えるべきではありません。

Kerberosを使用してユーザーを認証し、チケット(認証トークン)をフロントエンド側(Cookieやローカルストレージなど)に保管し、そのチケットを使用して将来の要求を認証する必要があります。私はAngular2でKerberosプロトコルの既存の実装を(ただし、あまりにも難しいことではありません)が表示されないので、これは、いくつかのカスタムメイドのコードとKerberosプロトコル(http://www.roguelynn.com/words/explain-like-im-5-kerberos/Kerberos authentication in Node.js https.get or https.request)の基本的な知識が必要になります。

あなたは、Kerberos上JWTを使用することができますが、これは、エンドポイントとフロントエンドの間に追加の層が必要になります。 IMHOでは、既に使用している技術(Kerberos)だけを使用する方が簡単です。

次に、許可されていないアクセスからルートを保護するために、Angular2でカスタムガードを実装できます(https://blog.thoughtram.io/angular/2016/07/18/guards-in-angular-2.htmlを参照)。