7

私は、3人のコーダーによる私的消費のためのサイトを持っています。 nginxが直接提供するシンプルなHTMLですが、オフィス内外での消費を意図しています。nginxでワンタイムクッキーを使った非常に単純な認証

私は簡単なパスワードまたは認証方式を使いたいと思っています。私はHTTPの認証を使用することができますが、これらはかなり頻繁に失効する傾向があります。私はまた、誰かがクッキーよりも嗅ぎやすい方がはるかに簡単だと心配しています。

ユニークな長いIDでブラウザのブラウザにクッキーを設定して、このクッキーを持つ(特定のサブドメインの)リクエストのみを受け入れるようにnginxに指示することができますか?

これは簡単ですか?どのように私

  1. は、ブラウザでクッキー
  2. でフィルタするnginxの教えてください、無期限にクッキーを設定しますか?クッキーにより、nginxのフィルターを持っている

答えて

6

クッキーは、例えば、存在して、アクセス権を持つ3人のためのあなたの実際の行動ではない場合、あなたには、いくつかのアクションを実行できます。

server { 
    ... 
    if ($http_cookie !~ 'secretvalue') { 
     return 401; 
    } 
    location/{ 
     #Auth'd behaviour 
    } 
} 

そして、無期限にクッキーを設定し、サーバーのホスト名でのページには、ブラウザのJavaScriptコンソールを起動し、入力する:

document.cookie = 'cookie=secretvalue;max-age=3153600000;path=/'; 

、いつまでも技術的にはBではないこと100年はそれをするべきです。もしあなたが傾けている場合はexpires=をRFC1123形式の絶対日付に使うこともでき、必要ならば簡単にpathを調整することができます。

また、任意のCookieを作成できるブラウザアドオンもありますが、現代のブラウザにはすべてJavaScriptコンソールがあります。

+1

〜 –

+0

グッドキャッチ、@doronaviguy:ここ

は設定です!。答えを更新しました! – davidjb

1

私はa blog post by Christian Stockerから見つけた本当に簡単な解決策があります。以下のルールを実装しています。

  1. ユーザーが内部IPを使用している場合は許可されます。
  2. ユーザーにCookieが設定されている場合は許可されます。
  3. どちらも一致した場合、彼らは成功した長期的なクッキーが

に設定されている。これは本当に両方の長所で認証を行う場合、ユーザーは、HTTP基本認証、およびを提示しています。私はあなたが意味を考える

map $cookie_letmein $mysite_hascookie { 
    "someRandomValue" "yes"; 
    default   "no"; 
} 

geo $mysite_geo { 
    192.168.0.0/24 "yes": #some network which should have access 
    10.10.10.0/24 "yes": #some other network which should have access 
    default  "no"; 
} 


map $mysite_hascookie$mysite_geo $mysite_authentication{ 
    "yesyes" "off"; #both cookie and IP are correct => OK 
    "yesno" "off"; #cookie is ok, but IP not => OK 
    "noyes" "off"; #cookie is not ok, but IP is ok => OK 
    default "Your credentials please"; #everythingles => NOT OK 
} 

server { 
    listen 80; 
    server_name mysite.example.org; 
    location/{ 
    auth_basic $mysite_authentication; 
    auth_basic_user_file htpasswd/mysite; 
    add_header Set-Cookie "letmein=someRandomValue;max-age=3153600000;path=/"; #set that special cookie, when everything is ok 
    proxy_pass http://127.0.0.1:8000/; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    } 
} 
関連する問題