web-dev-qa-db-fra.com

Comment ajouter des informations de connexion à l'URL

J'ai essayé https://myserver.com/~username=username&password=mypassword mais cela ne fonctionne pas.

Pouvez-vous confirmer qu'il est possible de passer l'utilisateur/passer via les paramètres HTTPs (GET ou POST)?

Fondamentalement, je veux accéder à ce lien https://www.globalnorm.net/gn/doc.php?name=ASTM%20F%202638:2012-00&erx= (mais je dois m'authentifier ) Comment passer mon nom d'utilisateur et mon mot de passe dans l'URL?

3
MokiNex

La méthode standard pour transmettre l'authentification de base aux serveurs Web consiste à utiliser une URL du formulaire:

http://user:[email protected]/

Les serveurs Web n'attendent pas d'authentification de base dans les paramètres de requête. Vous pouvez, bien sûr, implémenter votre propre authentification en utilisant des paramètres de requête/en-têtes HTTP ou toute autre méthode.

Mettre à jour

L'URL spécifique à laquelle vous avez fourni des redirections vers https://www.globalnorm.net/login.php?ecd=S&info=nosessionorcookie&doc=....

Le chemin de connexion pas retourne l'en-tête WWW-Authenticate qui est utilisé pour indiquer que l'authentification de base est prise en charge. Il est donc inutile d'essayer l'authentification de base HTTP.

Cette page de connexion spécifique semble attendre une POST à /login.php avec les paramètres USR, PAS. La réponse comprendra probablement un cookie qui sera ensuite utilisé pour s'authentifier auprès du serveur.

2
nimrodm

Le serveur Web ne se soucie de rien après le "?". Ces données sont envoyées à l'application.

Si vous vous authentifiez réellement auprès de l'application, vous devrez vérifier la documentation de l'application pour les noms de paramètres corrects.

Dans le passé, vous pouviez fournir le nom d'utilisateur: mot de passe @ domaine dans l'URL, mais cela a été désactivé dans de nombreux navigateurs récents en raison de risques de sécurité.

Actuellement, la seule façon dont je suis conscient de faire une connexion automatique est de définir un en-tête d'authentification de base et de publier un formulaire, mais vous feriez mieux d'utiliser une bibliothèque qui sait déjà comment le faire, car les champs doivent être encodés correctement pour fonctionner.

0
Terry Carmen

Si j'ai raison dans mon évaluation, la question est Pouvez-vous confirmer qu'il est possible de passer l'utilisateur/passer via les paramètres HTTPs (GET ou POST)? Voici un extrait de code que j'utilise pour envoyer le nom d'utilisateur et le mot de passe comme paramètres à un appel GET. J'espère que ça aide.

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

Il semble y avoir une certaine controverse quant à savoir si les navigateurs ont abandonné la fonctionnalité et/ou si la fonctionnalité est obsolète. Mais à moins que votre navigateur n'ait en fait supprimé la fonctionnalité, comme indiqué dans answer ci-dessus de @ nimrodm, vous pouvez spécifier une URL avec une authentification de base comme

http://user:[email protected]/

Cependant, vous ne devez vraiment pas utiliser le protocole http, car cela enverra les informations d'identification en texte clair. À la place, utilisez simplement:

https://user:[email protected]/

Notez que vous devez urlencode des caractères spéciaux dans les champs utilisateur ou mot de passe (j'utilise souvent '@' dans mes mots de passe, donc ceux-ci doivent être écrits comme '% 40').

Le navigateur extrait les informations d'identification et les transmet au serveur dans un en-tête d'autorisation:

Authorization: Basic credentials

où les informations d'identification sont simplement la chaîne (décodée par l'url) "nom d'utilisateur: mot de passe" telle qu'écrite dans l'url, mais encodée en base64. Mais comme la connexion https est cryptée, l'en-tête est crypté et les informations d'identification ne sont pas exposées en dehors du navigateur.

Je pense que tout le problème de la suppression du support ou de la dépréciation de la fonctionnalité était basé sur les implications de sécurité de la spécification des informations d'identification à l'aide du protocole http. Mais avec la disponibilité de certificats SSL gratuits, et le Push pour "SSL partout", cela ne semble plus être un gros problème de nos jours.

Bien sûr, il y a aussi la question de savoir combien de bonnes informations de passage vous permettent. Beaucoup ou la plupart des applications qui nécessitent une connexion s'attendent à obtenir les informations d'identification à partir d'un formulaire que l'utilisateur remplit et envoie avec une demande POST. L'application devrait être écrite pour vérifier chaque demande pour une Authorization header, et s'il est présent, traitez les informations d'identification de la même manière que si elles avaient été spécifiées par un POST d'un formulaire de connexion rempli).

Les applications qui attendent une authentification HTTP de base sont généralement construites avec cette exigence intégrée dans la configuration du serveur, par exemple en utilisant les directives Apache sur ces lignes:

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

Où le fichier /lib/protected.users est un fichier de noms d'utilisateur et de mots de passe chiffrés généré par le programme utilitaire Apache htpasswd. Avec cette configuration, toute demande de ressources inférieure à /htdocs/protected est automatiquement vérifié par Apache pour un en-tête Authentication. Si la demande n'a pas un tel en-tête ou si les informations d'identification spécifiées dans l'en-tête ne correspondent pas à l'une des paires de noms d'utilisateur et de mots de passe dans /lib/protected.users, le serveur répond par un 401 Unauthorized état et en-tête:

WWW-Authenticate    Basic realm="Registered User"

Notez que la valeur de domaine "Utilisateur enregistré" est la valeur AuthName de la configuration Apache. Le navigateur gère cette réponse en affichant une invite demandant un nom d'utilisateur et un mot de passe, avec la valeur du domaine contenue dans l'invite pour donner à l'utilisateur un indice sur le nom d'utilisateur et le mot de passe particuliers requis.

Les navigateurs doivent de toute façon traiter les informations d'identification pour les convertir en un en-tête Authorization, et ils les mettent également en cache et les envoient à chaque fois avec des demandes au même point de terminaison, comme l'envoi de cookies. S'ils ne le faisaient pas, l'utilisateur devrait les fournir à chaque URL suivante en spécifiant ce point de terminaison pour éviter d'être invité.

J'espère que cela t'aides.

0
sootsnoot