4

http と https を使用する Web サイトを持つことができる POC を作成しようとしています。そのため、ユーザーが認証されているかどうかに関係なく、マスター ページに情報が必要なコントロールがあります。これには、 を使用したいと思いますHttpContext.Current.User.Identity.IsAuthenticated。認証されている場合は認証されたユーザーの情報を表示し、そうでない場合はログイン コントロールを表示します。

[RequireHttps]コントロールを認証するには、属性を持つ Login アクションに対して AJAX POST 要求を行います。AJAX 要求で使用される URL は次のとおりです。

$.ajax({
    type: 'POST',
    url: '@Url.Action("ModalLogIn", "Authentication", null, "https", Request.Url.Host + ":44300")',

ちなみに、SSLを有効にしてVS2013 IIS Expressを使用しています。

私のAJAXリクエストでわかるように、アクションURLでHTTPSを使用しています。SSL を使用してサーバーに要求が行われ、応答が成功します。

問題は、後続のリクエストで ASPXAUTH Cookie がリクエスト ヘッダーに渡されないことです。したがって、サーバーはユーザー認証情報を取得しません。後続のリクエストは SSL を使用せずに行われる単純な HTTP リクエストです。

HTTP を介して ASPXAUTH を渡すことを期待しているため、セキュリティの観点から認証がまだ安全でないことはわかっていますが、前述のように POC であり、HTTPS を使用して単純な認証要求を行うことができるかどうかを確認したいと考えています。その他は HTTP を使用します。

要求されたとおり、これは応答ヘッダーです。

Access-Control-Allow-Orig...    *
Cache-Control   private
Content-Length  15
Content-Type    application/json; charset=utf-8
Date    Sat, 26 Oct 2013 18:57:55 GMT
Server  Microsoft-IIS/8.0
Set-Cookie  ASP.NET_SessionId=j2a53htev0fjp1qq4bnoeo0l; path=/; HttpOnly 
ASP.NET_SessionId=j2a53htev0fjp1qq4bnoeo0l; path=/; HttpOnly 
IAC.CurrentLanguage=en; expires=Sun, 26-Oct-2014 19:57:55 GMT; path=/ 
.ASPXAUTH=730DEDBFD2DF873A5F2BD581AA0E25B685CAD12C26AEA63AD82484C932E26B617687A05BB403216CC5EFCF799970810059F9CA2CF829F953580AF81FF48102003C0129AB04424F0D011A733CAAF1DE00688E5A4C93DEA97338DD2B5E7EE752F3761A470D52449BEBCA74098912DE37AA8C1E293B1C5D44EB1F9E9384DAAEF289; path=/; HttpOnly
    X-AspNet-Version    4.0.30319
    X-AspNetMvc-Version 3.0
X-Powered-By    ASP.NET
X-SourceFiles   =?UTF-8?B?QzpcTXkgRGF0YVxCaXRidWNrZXRcaWFjLXdlYnNpdGVcaW1wbGVtZW50YXRpb25cZG90bmV0XElBQy5XZWJcQXV0aGVudGljYXRpb25cTW9kYWxMb2dJbg==?=
4

3 に答える 3

1

認証 Cookie を設定すると、「セキュア」とマークされている可能性があります。

Chrome 開発者ツールを使用して、[リソース]、[Cookie] の順にクリックします。[セキュア] 列で、Cookie がマークされているかどうかを確認します。そうである場合、これはブラウザが安全でない接続を使用して認証 Cookie を送信しないことを意味します。

于 2013-10-24T17:28:17.607 に答える
0

JS による HTTPS 方式の ajax リクエストのように、すべてが完璧に機能します。関連する応答も正しく機能します。しかし、あなたも SSL でのログイン ページを用意していないようです。私の意味は:

[RequireHttps]
public ActionResult Login()
{
   return View();
}

次に、リクエストを HttpPost 対応アクションに送信します。私はそれが正しく機能すると信じています。ViewEngine (おそらく Razor による) で正式な Microsoft ajax フォームを使用している場合MicrosoftMvcAjax.jsなどの要件が不足していない限り。この記事を読むと、さらに役立つMicrosoftAjax.jsと思います。

幸運を。

于 2013-11-02T12:48:01.993 に答える