11

asp.net web api を使用して REST サービスを作成しようとしていますが、すべて正常に動作していますが、認証をどうするかがわかりました。

どこから始めればいいのか少し混乱しています。これが私が考えていたことです。

多数のリソースで構成される REST API があります。各リソースにはユーザーを登録する必要があります。これを行うための最善のアクションは何ですか? サービスへの各呼び出しでヘッダーにユーザー名とパスワードを送信して、サーバーで認証できるようにする必要があります

AuthorizationFilterAttribute

少なくとも暗号化する必要がありますか?他の人が何をしているのか知りたいです。トークンを作成するという概念があることを知っています(これは短命だと思います)。したがって、ユーザーは認証されてからトークンを受け取り、このトークンが送信されますサービスへのさらなる呼び出し。では、トークンの有効期限が切れたときの問題をどのように処理すればよいでしょうか?

また、新しいユーザーを登録するために使用されるリソースもあります。実際にこれを呼び出すのはクライアント (Android、iPhone) だけです。だから、少なくとも他の誰もが新しいユーザーを登録できないように、認証方法を無料のままにするか、ハードコードされたパスワードまたは同様のものを配置する必要がありますか? サービスはインターネット上で公開されることに留意してください。

これを行う正しい方法を見つけることができないようです。サービスを完全にリファクタリングする必要がないように、最初から正しい方法を試してみたいと思っています。

4

1 に答える 1

11

次のリンクは、いくつかの賢明な DIY オプションをカバーしているようですhttp://codebetter.com/johnvpetersen/2012/04/02/make-your-asp-net-web-apis-secure/。「公開鍵/秘密鍵に基づくトークン」セクションでは、私が過去に効果的に使用したアプローチを取り上げており、おそらくあなたの助けになるでしょう.

現時点では、 http: //identityserver.codeplex.com/ OAuth ベアラー トークン (「リソース オーナー パスワード資格情報」付与タイプ) を備えた Thinktecture IdentityServer を使用していますが、これは非常に優れたコードと例のセットであることがわかりますから作業し、IOS クライアントにトークンを取得させ、WebApi を呼び出してもらいます。

登録画面を本当に保護する必要がある場合は、デバイスにインストールされているクライアント証明書を使用して認証することができます... ここでも Thinktecture サービスが役立ちますhttps://identity.thinktecture.com/idsrv/docs/default.htm?RequestingatokenusingOAuth2. html . 登録プロセスが安全である場合でも、メールの確認やアクティベーションなど、ノンスを含むメールのアクティベーション/登録/パスワードリセットリンクのベストプラクティスは何ですか?一般にアクセス可能なままにしておくのは安全かもしれません-これはすべて、ビジネス要件と希望するサインに依存しますアップワークフロー。

少なくともトランスポート レベルのセキュリティ SSL を使用する必要がありますが、メッセージ レベルのセキュリティを提案しているように、たとえばトークンを暗号化することをお勧めします。 -v2-bearer.html#軽減策.

トークンの期限切れについて - パスワード変更ポリシーと同じ頻度でトークンを期限切れにする傾向があります。ただし、有効期間を短くすることは (トークンの盗難の影響を最小限に抑えるために) 重要であり、要件とのバランスを考慮することも重要です。OAuth にはリフレッシュ トークンの概念があります OAuth v2 にアクセス トークンとリフレッシュ トークンの両方があるのはなぜですか? ここでこのトピックに関するいくつかの議論とリンクがありますが、使用している ID サーバーが現在これをサポートしていないため、現在このアプローチを使用していません。

トークンを安全に保つことも考慮事項です。たとえば、IOS で KeyChain を使用していますが、可能であれば、これらのトークンまたはパスワードが盗まれる可能性のあるデバイスの 1 つであるかのように、モバイル デバイス管理ポリシーについても考えてください。脱獄検出やロック画面を調べてください。施行など

于 2012-07-09T08:23:42.620 に答える