私が現在開発しているアプリケーションでは、ASP.Netフォーム認証を使用して、ユーザーにサイトへのさらなるアクセスを許可しています。このサイトはモバイルユーザーを対象としているため、サーバーからできるだけ離れて、KnockoutJSを使用してWebサービスを呼び出し、ユーザーが表示できるようにデータをロードするようにしています。
現在、Webサービス(GETメソッドを使用するRESTサービス)では、そのユーザーに固有のデータをロードするためにユーザー名が必要です。この情報はサーバー側(ASP.net)にありUser.Identity.Name
、フォーム認証Cookieに直接アクセスするか、直接アクセスして情報を取得することが簡単にできます。
私の問題は、サービス呼び出しを行うことができるように、サーバーからクライアントにユーザー名を取得する必要があることです。私はこれを安全に行うことを検討しましたが、これまでのところ空白になっています。現在、ユーザー名をurlパラメーターとして渡し、JavaScriptを使用して解析しPage_Load
、URL内のユーザー名がログインユーザーと一致することを確認するメソッドをチェックしています。
フォームを使用してユーザーを認証したASP.Netからクライアント側のJavaScriptにユーザー名を安全に渡す方法が必要です。これにより、RESTWebサービスを呼び出すことができます。
編集:グーグルでチームリーダーと会った後、次の例のようなOAuth実装を使用すると思います。
http://www.c-sharpcorner.com/UploadFile/surya_bg2000/secure-wcf-restful-service-using-oauth/
また、同じ答えを探している他の人にとって、この質問はOAuthを理解するのに非常に役立ちます。
Nonceを1回しか使用できない場合、OAuthのタイムスタンプのポイントは何ですか?
すべてが正しく実装されていると仮定すると、代わりに、以下に説明するように、生成された署名をASPタグを介して渡す方が安全ですか(完全に安全、安全、または安全ではありませんか?)。
編集2:いくつかのレビューといくつかの検索の後、私たちは最終的にこの作業を行うためのフレームワークと方法を決定しました。OAuthが必ずしもここでの答えではないことが判明したので、この質問は次のとおりです。
しかし、真剣に....OAuthを含むASP.NETWebAPI実装の例
これを機能させる方法を理解する上でも、多くの助けになりました。最終的に行うのは、署名を生成し、JavaScriptを挿入して、そのように呼び出すことです。署名は時間に敏感であり、ユーザーがページをロードするたびに再生成されるため、OAuthと非常によく似ていますが、完全な仕様を実装することはありません。
TL:DR最終的な解決策は、ハッシュ署名を生成し、ASPサーバータグ<%aspvar_here%>を介してページに配置し、それを使用してサービス呼び出しを検証することでした。