2016-10-23 6 views
1

外部OAuth2サーバー(IdentityServer4)を使用してAngular 2 Appを開発したいと考えています。OAuth2でClientIDを保護する方法は?

また、各クライアントを一意に識別したいと考えています。しかし、Angular 2/JavascriptソースでClientIDを保護する方法はありますか? CORSでここで働いて、要請の起点を確認しなければなりませんか?認証のためにサーバー側アプリケーションを構築する必要がありますか?

当社のモバイルアプリは

しかし、クライアントID 99999を使用すべきであるのClientID 12345 当社の角度のAppを使用する必要があります誰がそれを拒否しなければならないのClientID 12345を使用しようとする場合。

ここでベストプラクティスは何ですか? - Angularで直接認証しますか? - Auth用のServerappの各角度のAppに使用しますか?

答えて

0

OAuth2は、重要なキーのペアで動作します。

1つのアプリを識別するために使用されるのはClientIDとClientSecretの両方です。 ClientIDはパブリックにすることができます。これは秘密です。

コードはクライアント側になるため、問題が発生します。クライアント側のみで動作するOAuth2の実装があることは確かです。私はそれがあなたが何をしていてもクライアントの側を見ることができるので、それが正直であることの安全性を確信していません。

このような状況で私がしたことは、クライアント側のアプリケーションとOAuth2サーバの間の余分なレイヤーだった少しのバックエンドを持つことでした。非常に単純なMVCでも非常に単純なWebApi2でもかまいません。フロントエンドで使用するエンドポイントのみを表示しますが、主な役割はフロントエンドからコールを受け取り、キーを追加して使用するOAuth2呼び出しを作成することです実際のリソースサーバーによって。このようにして、フロントエンドに鍵が保存されることはなく、バックエンド側で安全に保つためのメカニズムを採用することができます。

認証ヘッダーにこれらのものを渡すだけで、常にhttps接続で認証/リソースサーバーで作業します。

+0

クライアントシークレットを非表示にするベストプラクティスは、認証を実行するASP.NET Coreなどのサーバー側アプリケーションで常にAngularを配信することです。 AngularをCDNで実行し、OAuth 2サーバーとやりとりしてデータを保護するだけではありませんか?これは圧倒的ではない。 – PeterLiguda

+0

https://www.npmjs.com/package/node-oauth2-serverを使用して調べることができるノードパッケージがあります。どちらの方法でも、バックエンド、ノードまたはその他のものが必要です。トークンを取得するためには、IDと秘密が必要であるという事実から脱却することはできません。フロントエンド側にそれらを安全に保管する方法が見つかった場合は、問題を解決しました。 –

1

公開クライアントを認証することはできません。安全な方法はありません。

特にブラウザベースのクライアントの場合、公開リターンURLの所有権のみを使用してクライアントを識別できます。

これは決して可能ではありません.OAuth2はその状況を変更しません。

関連する問題