Laravel 5.4问题使代理适用于Microsoft AD

时间:2018-07-27 02:23:06

标签: php active-directory laravel-5.4 http-proxy

我一直在更新Laravel 5.4网站,该网站必须很快投入生产。该站点将Azure AD身份验证用于自定义的书面单点登录机制。在没有任何代理的互联网环境下的开发环境中,这很好用。不幸的是,UAT和生产服务器位于导致问题的代理后面。身份验证所基于的代码基于Microsoft Graph API REST php示例。

第一部分如下所述,使用“ phpleague” OAuth2客户端从Microsoft检索令牌

$provider = new \League\OAuth2\Client\Provider\GenericProvider([
        'clientId'                => config('app.client_id'),
        'clientSecret'            => config('app.client_secret'),
        'redirectUri'             => 'https://egmbank.local/oauth',
        'urlAuthorize'            => 'https://login.microsoftonline.com/'.config('app.tenant_id').'/oauth2/v2.0/authorize',
        'urlAccessToken'          => 'https://login.microsoftonline.com/'.config('app.tenant_id').'/oauth2/v2.0/token',
        'urlResourceOwnerDetails' => '',
        'scopes'                  => 'openid mail.send'
    ]);

    if (!$request->has('code')) {
        return redirect($provider->getAuthorizationUrl());
    } else {
        try {
            $accessToken = $provider->getAccessToken('authorization_code', [
                'code' => $request->input('code')
            ]);
        } catch (\League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {

            // Failed to get the access token
            exit($e->getMessage());

        }
    }

// The "me" endpoint should return the information about the signed in user
    $client = new Client();

    $response = $client->request('GET', 'https://graph.microsoft.com/v1.0/me', [
        'headers' => [
            'Authorization' => 'Bearer ' . $accessToken->getToken(),
            'Content-Type' => 'application/json;odata.metadata=minimal;odata.streaming=true'
        ]
    ]);

    $me = json_decode($response->getBody()->getContents());

    // This is the name to display in the header of each page
    $displayName = $me->displayName;

如上所述,当不在代理后面时,这可以很好地工作,我得到了返回的令牌,然后可以进一步调用以从AD获取用户和组详细信息。

我看过联赛的OAuth2文档,这样它也是代码,它表明只需添加即可使用代理

'proxy' => 'proxy_name',
'verify' => false

到用于构建提供程序的参数列表。我已经捆绑了这个请求,但请求仍然被阻止。该文档确实说我必须“确保您在代理中启用SSL代理”。我检查了网络人员,他们认为“我们绕过了这些Microsoft网站的SSL加密”,对此无可奈何。

我查看了fideloper / TrustedProxies软件包,发现文档很难遵循,尤其是对于Laravel 5.4网站。

我已经将SSH连接到UAT服务器,并在命令提示符下设置了http_proxy,并且运行以下命令没有问题

curl -v https://login.microsoftonline.com:443
curl -v microsoft.com

所以当我告诉UAT服务器使用代理时,似乎可以通过代理。我本以为会有一种方法可以轻松地使Laravel项目对所有网络流量使用代理。

在这一点上,我感到很沮丧,如果能帮助该项目使用代理,不胜感激

0 个答案:

没有答案