2017-04-09 6 views
0

Je dois permettre OpenID pour notre application en ligne de commande (Django Application) Ex: chaque fois que les utilisateurs tentent d'accéder à nos API, je dois vous assurer que l'utilisateur est authentifié avec OpenID (Microsoft/Google). J'essaie d'écrire un script Shell pour accéder au site Web OpenID, puis stocker le cookie sur la machine de l'utilisateur et chaque fois qu'il essaie d'accéder à la deuxième application, il devrait avoir un accès basé sur le cookie que je stocke sur sa machine. J'essaie d'utiliser l'approche mentionnée here et chaque fois que j'essaie d'accéder à la deuxième URL, j'obtiens une erreur "Votre navigateur est actuellement configuré pour bloquer les cookies.Vous devez autoriser les cookies à utiliser ce service."CURL Authentifier à un site Web

Mes sites ne sont pas sur un seul domaine, ils utilisent OpenID pour l'authentification.

  1. Je me suis connecté dans le premier site et le site me redirigés vers OpenId site web (AD Azure)
  2. Je l'URL redirigée accéder en utilisant le nom d'utilisateur avec boucle et mot de passe avec succès et stocké le cookie.
  3. Quand je suis en train de se connecter au deuxième site en utilisant la ligne ci-dessous , je vois cette erreur. (Comme je les cookies stockés, il devrait être en mesure de les lire et d'ouvrir la deuxième page du site)

curl --cookie ./somefile https://secondwebsite.com/b

Voici mon script complet

#Setting redirect url in IP variable 
set IP=`curl -w "%{url_effective}\n" -I -L -s -S http://mysite1.com -o /dev/null` 
echo "Trying to Authenticate.." 
curl -L -s -S -I -k -v -i --user "[email protected]" -D ./temp/cookie $IP 
echo "Authentication successful" 
#I need to check if the cookie is set or not, If it is set Authentication is successful 

echo "Trying to access the second url" 
#The below line is failing, When I wrote the whole content to html file, I see the error mentioned above (Your browser is currently set to block cookies. You need to allow cookies to use this service) 
curl --cookie ./temp/cookie https://secondwebsite.com/ 

Pour résumer, je suis coincé avec deux questions

  1. Authentification de l'utilisateur à un second site sans eding to login again
  2. Parfois, l'URL d'authentification demande un mot de passe à l'utilisateur, , qui sera envoyé aux utilisateurs Mobile (authentification à 2 facteurs). Des conseils sur la façon de gérer ce cas, s'il se pose?

Répondre

0

Il existe des méthodes sécurisées appropriées pour permettre à votre application de ligne de commande d'accéder à votre API. [OpenId Connect RFC] (http://openid.net/specs/openid-connect-core-1_0.html), vous permet d'utiliser le client public [code flow] (http://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth) pour obtenir access_token et refresh_token. L'utilisateur peut le faire pour la première fois et pour des utilisations plus tard l'application de ligne de commande peut use the Refresh Tokens continuer de renouveler pour un nouveau jeton d'accès et appeler l'API.

Azure AD B2C a quelques exemples qui montrent comment vous pouvez invoquer le [flux de code à partir d'une application de bureau] (https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-native-dotnet) et le GitHub correspondant.

Ce lien a plus de détails https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-oauth-code#4-refresh-the-token

De cette façon, votre application de ligne de commande est jamais collecter des informations sensibles telles que les mots de passe ou les détails de MFA. Il appelle le navigateur pour laisser AAD B2C faire l'authentification la plus sécurisée configurée et donner à l'application l'access_token. A partir de là, la ligne de commande utilise simplement access_token en tant que jeton support en le plaçant dans l'en-tête Authorization.

+0

Conformément à la spécification, il a fallu une interaction avec le navigateur, mais je cherche une authentification entièrement basée sur une ligne de commande. le client doit être capable d'interagir avec l'agent utilisateur du propriétaire de la ressource (généralement un navigateur Web) (https://tools.ietf.org/html/rfc6749#section-4.1) –