Webアプリケーションから自分のAPIに安全にアクセスするにはどうすればよいですか?

ゾーン

私はAPIを持っています。それらのいくつかは、OAuthによるサードパーティアプリケーションからのアクセスに制限されています。

Webアプリケーションもあります。ユーザーはログインして自分の個人情報を見ることができます。

APIはWebアプリケーションからも呼び出されます。私の質問は、セキュリティ対策を講じてAPIにアクセスするための良い方法は何ですか。

1. Third party applications -> OAuth

2. My own web application -> ???

私のWebアプリケーションは認証にセッションIDを使用しています。HTTPヘッダー付きのセッションIDを転送するのは良い方法かもしれませんが、自信がありません。

例として...

$ curl -X PUT \
       -H "X-Sample-Application-Id: "My own web application's ID" \
       -H "X-Sample-Session-Token: yeoql2dvn7whpm4tbe61viscv" \

APIがこのリクエストを受信した場合は、oauthの代わりにセッションを認証に使用してユーザーを識別します。

どんな助けでもありがたいです。

ありがとう、

..同様の質問を見つけました

OAuthで独自のAPIを使用することに関する質問


Update1

JWT(Json Web Token)が良いと言う人もいます。

https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/

http://blog.mitsuruog.info/2014/08/jwtjson-web-tokenwebapicredential.html


Update2

OAuthの「リソース所有者のパスワード資格情報」を使用できる場合があります

https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/709.html

または...「クライアント資格情報の付与」の方がはるかに優れています。

rdegges

これについては少し詳しく説明します。これは良い質問であり、周りには多くの混乱があるためです。ここで我慢してください。

保護しようとしているAPIが、サードパーティの開発者ではなくサーバー側アプリの個人によって独占的に使用される場合は、HTTP基本認証を使用してAPIサービスを保護することを強くお勧めします。

これが機能する方法は非常に簡単です。

  • ユーザーの場合、IDとシークレットで構成されるAPIキーペアを生成します。APIキーはユーザー名/パスワードと同義です。UUIDライブラリを使用してランダムなID /シークレット値を生成するだけです。
  • APIサービスに対して認証するときは、HTTPAuthorizationヘッダーでそれらのAPI資格情報を指定して自分自身を識別します。これが使用してどのように見えるかcurlです:

    $ curl --user my-api-keyid:my-api-key-secret https://api.myservice.com/blah

基本認証の優れている点は次のとおりです。

  • 実装は非常に簡単です。
  • これは明確に定義された標準です。
  • HTTPSを介してリクエストを行い、APIキーを公開しない限り、安全である必要があります。

さて、(サーバー側のアプリケーションだけでなく)さまざまな環境からユーザーを認証するAPIサービスを構築している場合は、実際にはOAuth2プロトコルを使用する必要があります。

これはそれが設計されたものです。

OAuth2プロトコルはさまざまな方法でユーザーを認証できますが、その結果、非常に複雑になります。人気のあるライブラリなどを使用している場合でも、サイトにOAuthを追加するのは難しい場合があります。

OAuthの仕組みは次のとおりです(簡単な内訳)。

パスワード付与

OAuthのパスワードフローでは、ユーザー名/パスワードをアクセストークン(通常はJWT)と交換します。次に、HTTP Authorizationヘッダーのアクセストークンを使用して、APIサービスで自分自身を識別します。

これは、ほとんどの人がAn​​gular / ReactやモバイルアプリでSPAを構築するときに行うことです。

クライアント資格情報の付与

クライアント資格情報フローでは、APIキー(基本認証と同様)をアクセストークンと交換します。次に、HTTP Authorizationヘッダーのアクセストークンを使用して、APIサービスで自分自身を識別します。

これは、OAuthを使用してサーバー側アプリを構築するときに人々が行うことです。

暗黙の助成金

このフローは、Facebookなどの場所にログインしたときに表示されるものです。ボタンをクリックすると、他のサイトにリダイレクトされてアクセス許可を認証/承認します。最後に、自分を識別するために使用するアクセストークンを使用してメインサイトに戻ります。これはAPIサービスには理想的ではありません。

承認コード付与

このフローは暗黙のフローとまったく同じですが、認証コードを取得し、それを自分自身を識別するために使用するアクセストークンと交換する点が異なります。これはAPIサービスには理想的ではありません。少し安全です。

ユースケースのためにOAuthを使用することを計画している場合は、Stormpathなどの認証プロバイダーを確認することを強くお勧めします。彼らはこれらの多くを自動化し、OAuthに関する多くの複雑さを解決します。

それ以外の場合は、基本認証を試してみてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

アプリケーションの他のユーザーが自分のコンピューターからRDSにアクセスできるようにするにはどうすればよいですか?

分類Dev

gunicornのpre_forkフックからアプリケーションにアクセスするにはどうすればよいですか?

分類Dev

アプリケーション内からJBossデータディレクトリにアクセスするにはどうすればよいですか?

分類Dev

自分のAndroidアプリケーションからTelegramアプリを起動するにはどうすればよいですか?

分類Dev

別のアプリケーションから呼び出されたWebサービスのweb.configセクションにアクセスするにはどうすればよいですか?

分類Dev

Xamarin.Androidに自分のアプリケーションサブクラスを登録するにはどうすればよいですか?

分類Dev

自分のデスクトップ共有アプリケーションをJavaで作成するにはどうすればよいですか?

分類Dev

ソフトウェアセンターで自分のアプリケーションを更新するにはどうすればよいですか?

分類Dev

カスタムArrayAdapterからアプリケーションにアクセスするにはどうすればよいですか?

分類Dev

WindowsアプリケーションからDDC / CI Display Dependent Deviceにアクセスするにはどうすればよいですか?

分類Dev

AWS Elastic Beanstalkで現在のアプリケーションにアクセス/ダウンロードするにはどうすればよいですか?

分類Dev

Spark Streamingアプリケーションの統計エンドポイントにアクセスするにはどうすればよいですか?

分類Dev

KubernetesクラスターのアプリケーションからRedisクラスターに接続するにはどうすればよいですか?

分類Dev

Spring BootでPOSTリクエストをあるWebアプリケーションから別のWebアプリケーションに正しく転送するにはどうすればよいですか?

分類Dev

別のアプリケーションモジュールのVOから1つのアプリケーションモジュールのVOにアクセスするにはどうすればよいですか?

分類Dev

Webアプリケーションの外部にある場合、リクエストをブロックするにはどうすればよいですか?

分類Dev

C#アプリケーションから別のアプリケーションのメニューバーとサブメントにアクセスするにはどうすればよいですか?

分類Dev

同じドメインでホストされている別のlaravelアプリケーションを介してphpアプリケーションのセッションにアクセスするにはどうすればよいですか?

分類Dev

アプリケーション(JavascriptとPHP)からのみAPIにアクセスできるようにするにはどうすればよいですか?

分類Dev

DevToolsを介してElectronアプリケーションの `electron.remote.app`にアクセスするにはどうすればよいですか?

分類Dev

iOSの「〜/アプリケーション」にアクセスするにはどうすればよいですか?

分類Dev

Dockerコンテナ内のアプリケーションからWebサービスを公開するにはどうすればよいですか?

分類Dev

スケールからWebアプリケーションにデータを取得するにはどうすればよいですか?

分類Dev

MDMによって設定されたUWPアプリケーション設定にアクセスするにはどうすればよいですか?

分類Dev

JavaでWebとデスクトップ用のシングルアプリケーションを作成するにはどうすればよいですか

分類Dev

このWebアプリケーションでjQueryセレクターを使用するにはどうすればよいですか?

分類Dev

アプリケーションの終了時にWebリクエストを送信するにはどうすればよいですか?

分類Dev

Qtプラグインからホストアプリケーションのクラスを使用するにはどうすればよいですか?

分類Dev

Javaアプリケーションの別のクラスからユーティリティクラスに宣言されたパブリック最終静的リストにアクセスするにはどうすればよいですか?

Related 関連記事

  1. 1

    アプリケーションの他のユーザーが自分のコンピューターからRDSにアクセスできるようにするにはどうすればよいですか?

  2. 2

    gunicornのpre_forkフックからアプリケーションにアクセスするにはどうすればよいですか?

  3. 3

    アプリケーション内からJBossデータディレクトリにアクセスするにはどうすればよいですか?

  4. 4

    自分のAndroidアプリケーションからTelegramアプリを起動するにはどうすればよいですか?

  5. 5

    別のアプリケーションから呼び出されたWebサービスのweb.configセクションにアクセスするにはどうすればよいですか?

  6. 6

    Xamarin.Androidに自分のアプリケーションサブクラスを登録するにはどうすればよいですか?

  7. 7

    自分のデスクトップ共有アプリケーションをJavaで作成するにはどうすればよいですか?

  8. 8

    ソフトウェアセンターで自分のアプリケーションを更新するにはどうすればよいですか?

  9. 9

    カスタムArrayAdapterからアプリケーションにアクセスするにはどうすればよいですか?

  10. 10

    WindowsアプリケーションからDDC / CI Display Dependent Deviceにアクセスするにはどうすればよいですか?

  11. 11

    AWS Elastic Beanstalkで現在のアプリケーションにアクセス/ダウンロードするにはどうすればよいですか?

  12. 12

    Spark Streamingアプリケーションの統計エンドポイントにアクセスするにはどうすればよいですか?

  13. 13

    KubernetesクラスターのアプリケーションからRedisクラスターに接続するにはどうすればよいですか?

  14. 14

    Spring BootでPOSTリクエストをあるWebアプリケーションから別のWebアプリケーションに正しく転送するにはどうすればよいですか?

  15. 15

    別のアプリケーションモジュールのVOから1つのアプリケーションモジュールのVOにアクセスするにはどうすればよいですか?

  16. 16

    Webアプリケーションの外部にある場合、リクエストをブロックするにはどうすればよいですか?

  17. 17

    C#アプリケーションから別のアプリケーションのメニューバーとサブメントにアクセスするにはどうすればよいですか?

  18. 18

    同じドメインでホストされている別のlaravelアプリケーションを介してphpアプリケーションのセッションにアクセスするにはどうすればよいですか?

  19. 19

    アプリケーション(JavascriptとPHP)からのみAPIにアクセスできるようにするにはどうすればよいですか?

  20. 20

    DevToolsを介してElectronアプリケーションの `electron.remote.app`にアクセスするにはどうすればよいですか?

  21. 21

    iOSの「〜/アプリケーション」にアクセスするにはどうすればよいですか?

  22. 22

    Dockerコンテナ内のアプリケーションからWebサービスを公開するにはどうすればよいですか?

  23. 23

    スケールからWebアプリケーションにデータを取得するにはどうすればよいですか?

  24. 24

    MDMによって設定されたUWPアプリケーション設定にアクセスするにはどうすればよいですか?

  25. 25

    JavaでWebとデスクトップ用のシングルアプリケーションを作成するにはどうすればよいですか

  26. 26

    このWebアプリケーションでjQueryセレクターを使用するにはどうすればよいですか?

  27. 27

    アプリケーションの終了時にWebリクエストを送信するにはどうすればよいですか?

  28. 28

    Qtプラグインからホストアプリケーションのクラスを使用するにはどうすればよいですか?

  29. 29

    Javaアプリケーションの別のクラスからユーティリティクラスに宣言されたパブリック最終静的リストにアクセスするにはどうすればよいですか?

ホットタグ

アーカイブ