要对网站进行身份验证的CURL

时间:2017-04-09 01:51:36

标签: bash authentication curl cookies openid-provider

我必须为我们的命令行应用程序启用OpenID(Django应用程序)对于Ex:每当用户尝试访问我们的API时,我必须确保用户使用OpenID(Microsoft / Google)进行身份验证。我正在尝试编写一个Shell脚本来访问OpenID网站,然后将cookie存储在用户的计算机上,每当他尝试访问第二个应用程序时,他都应该根据我存储在他计算机上的cookie进行访问。

我正在尝试使用here提及的方法,每当我尝试访问第二个网址时,我都会收到错误消息“您的浏览器当前已设置为阻止Cookie。您需要允许Cookie才能使用此服务。“

我的网站不在单个域上,他们使用OpenID进行身份验证。

  1. 我登录了第一个网站,网站将我重定向到了OpenID 网站(Azure AD)
  2. 我使用curl用户名和密码访问了重定向的url 成功并存储了cookie。
  3. 当我尝试使用以下内容登录第二个网站时 行,我看到这个错误。 (因为我已经存储了cookie,所以应该能够阅读它们并打开第二个网页)
  4. curl --cookie ./somefile https://secondwebsite.com/b

    这是我的完整脚本

    #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 "username@microsoft.com" -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/
    

    总结一下,我遇到了两个问题

    1. 无需登录即可将用户身份验证到第二个站点 再次
    2. 有时,身份验证网址会向用户请求密码, 这将被发送给用户Mobile(2 Factor Authentication)。有关如何处理这种情况的任何指示吗?

1 个答案:

答案 0 :(得分:0)

有适当的安全方法可让您的命令行应用程序访问您的API。

[OpenId Connect RFC](http://openid.net/specs/openid-connect-core-1_0.html)允许您使用公共客户端[代码流](http://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth)来获取access_token和refresh_token。用户可以第一次执行此操作,并且以后使用命令行应用程序可以use the Refresh Tokens继续更新新的访问令牌并调用API。

Azure AD B2C提供了一些示例,说明如何调用[来自桌面应用程序的代码流](https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-native-dotnet)和相应的GitHub

此链接包含更多详情https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-oauth-code#4-refresh-the-token

这样,您的命令行应用程序永远不会收集密码或mfa详细信息等敏感信息。它调用浏览器让AAD B2C进行最安全的身份验证配置,并为app提供access_token。从那时起,命令行通常将access_token用作承载令牌,方法是将其放在Authorization标头中。