web-dev-qa-db-ja.com

ログイン認証情報をURLに追加する方法

https://myserver.com/~username=username&password=mypassword を試しましたが、うまくいきません。

HTTPsパラメーター(GETまたはPOST)を介してユーザー/パスを渡すことが可能であることを確認できますか?

基本的に、このリンクにアクセスしたい https://www.globalnorm.net/gn/doc.php?name=ASTM%20F%202638:2012-00&erx= (ただし、認証が必要)ユーザー名とパスワードをURLで渡すにはどうすればよいですか?

3
MokiNex

基本認証をWebサーバーに渡す標準的な方法は、次の形式のURLを使用することです。

http://user:[email protected]/

Webサーバーは、クエリパラメータで基本認証を想定していません。もちろん、クエリパラメータ/ HTTPヘッダーまたはその他の方法を使用して、独自の認証を実装できます。

更新

指定した特定のURLはhttps://www.globalnorm.net/login.php?ecd=S&info=nosessionorcookie&doc=...にリダイレクトされます。

ログインパスしないでください基本認証がサポートされていることを示すために使用されるヘッダーWWW-Authenticateを返します。したがって、HTTP基本認証を試しても意味がありません。

この特定のログインページは、POST /login.phpへのリクエストとUSR、PASパラメータを要求することを期待しています。回答には、後でサーバーでの認証に使用されるCookieが含まれる可能性があります。

2
nimrodm

Webサーバーは「?」を過ぎても何も気にしません。このデータはアプリケーションに送信されます。

実際にアプリケーションを認証している場合は、アプリのドキュメントで正しいパラメータ名を確認する必要があります。

以前は、URLにusername:password @ domainを指定することもできましたが、セキュリティ上のリスクのため、最近の多くのブラウザでは無効になっています。

現在、自動ログインを行うために知っている唯一の方法は、基本的な認証ヘッダーを設定してフォームに投稿することですが、フィールドはすでにその方法を知っているライブラリを使用した方がよいでしょう。正しく機能するようにエンコードする必要があります。

0
Terry Carmen

私の評価が正しい場合、質問はHTTPsパラメーター(GETまたはPOST)を介してユーザー/パスを渡すことが可能であることを確認できますか?これは私が使用しているコードのスニペットですユーザー名とパスワードをパラメーターとしてGET呼び出しに送信します。それが役に立てば幸い。

 $('#button').click(function () {
            var username = $('#username').val();
            var password = $('#password').val();
            window.location.href = '@Url.Action("DesiredAction")?username=' + username + '&password=' + password;
        });

ブラウザが機能を削除したかどうか、および/または機能が廃止されたかどうかについて、いくつかの論争があるようです。ただし、実際にブラウザで機能が削除されていない限り、@ nimrodmの answer で説明したように、基本認証でURLを次のように指定できます。

http://user:[email protected]/

ただし、httpプロトコルはクレデンシャルをクリアテキストで送信するため、実際にはhttpプロトコルを使用しないでください。代わりに、次のように使用します。

https://user:[email protected]/

ユーザーまたはパスワードのフィールドに特殊文字をurlencodeする必要があることに注意してください(パスワードでは「@」を頻繁に使用するため、「%40」と記述する必要があります)。

ブラウザーは資格情報を抽出し、それらをAuthorizationヘッダーでサーバーに渡します。

Authorization: Basic credentials

ここで、資格情報は、URLに記述されている(urlデコードされた)文字列 "username:password"ですが、base64でエンコードされています。ただし、https接続は暗号化されているため、ヘッダーは暗号化され、資格情報はブラウザーの外部に公開されません。

サポートの削除または機能の廃止に関する問題全体は、httpプロトコルを使用して資格情報を指定することによるセキュリティへの影響に基づいていたと思います。しかし、無料のssl証明書が利用可能になり、「ssl everywhere」のプッシュが加わったことで、最近はそれほど問題になりそうにありません。

もちろん、この方法で資格を渡すことでどれだけ優れているかという問題もあります。ログインを必要とする多くまたはほとんどのアプリケーションは、ユーザーが入力したフォームから資格情報を取得し、POST要求で送信します。アプリケーションは、Authorizationヘッダーの各要求をチェックするように作成する必要があります、および存在する場合は、POST記入済みログインフォームのPOST $ ===で指定されている場合と同じように資格情報を処理します。

HTTP基本認証を期待するアプリケーションは、通常、サーバー構成に組み込まれている要件を使用して作成されます。これらの行に沿ってApacheディレクティブを使用する:

<Directory "/htdocs/protected">
    AuthName "Registered User"
    AuthType Basic
    AuthUserFile /lib/protected.users
    require valid-user
</Directory>

ファイル/lib/protected.usersは、Apacheユーティリティプログラムhtpasswdによって生成された暗号化されたユーザー名とパスワードのファイルです。この構成では、/htdocs/protected以下のリソースに対するリクエストは、AuthenticationヘッダーについてApacheによって自動的にチェックされます。リクエストにそのようなヘッダーがない場合、またはヘッダーで指定された認証情報が/lib/protected.usersのユーザー名とパスワードのペアのいずれとも一致しない場合、サーバーは401 Unauthorizedステータスとヘッダーで応答します。

WWW-Authenticate    Basic realm="Registered User"

レルム値「Registered User」は、Apache構成のAuthName値であることに注意してください。ブラウザは、ユーザー名とパスワードを要求するプロンプトを表示し、プロンプトに含まれているレルムの値を表示することでこの応答を処理し、ユーザーに特定のユーザー名とパスワードが必要かどうかのヒントを提供します。

ブラウザーは、資格情報を特別に処理してAuthorizationヘッダーに変換する必要があるため、Cookieの送信のように、それらをキャッシュし、同じエンドポイントへのリクエストで毎回それらを送信します。これを行わなかった場合、ユーザーはプロンプトが表示されないように、そのエンドポイントを指定する後続の各URLでそれらを提供する必要があります。

お役に立てれば。

0
sootsnoot