2017-10-26 8 views
1

私は自分のMicrosoftアカウントでログインできるようにするGraph APIで作業しています。私はGet started with Microsoft Graph in a PHP app の記事に従っています。必要なオプションが渡されません: "access_token"

は今、私はLaravelに新しいものではないんだけど、私はこの問題を把握するように見えることはできません。リーグOAuth2パッケージを使用しています。上記のリンクによれば、接続を確立する前にアクセストークンを取得する必要があります。さて、私は自分でデバッグをたくさん探していましたが、次は私が見つけたものです。

$token = $this->createAccessToken($prepared, $grant); 

それがaccess_tokenはこの前に存在するか否かをチェックするトークンを作成しようとします。今度はこの方法からaccess_tokenが生成されると私は理解しています。だから、どうしたらそれがすでに存在するのだろうか。誰もがこれで私を助けてくれる?

Route::get('/oauth', function (Request $request) { 
$provider = new \League\OAuth2\Client\Provider\GenericProvider([ 
    'clientId'    => 'client_id', 
    'clientSecret'   => 'secret_key', 
    'redirectUri'    => 'http://localhost:8000/oauth', 
    'urlAuthorize'   => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize', 
    'urlAccessToken'   => 'https://login.microsoftonline.com/common/oauth2/v2.0/token', 
    'urlResourceOwnerDetails' => '', 
    'scopes'     => 'openid' 
]); 

if (!$request->has('code')) { 
    return redirect($provider->getAuthorizationUrl()); 
} else { 
    $accessToken = $provider->getAccessToken('authorization_code', [ 
     'code'  => $request->input('code') 
    ]); 
    exit($accessToken->getToken()); 
} 
}); 

ありがとう:

は、ここに私の経路コードです。

アップデートは今、私はこの

$url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'; 
    $data = 'grant_type=authorization_code'; 
    $data .= '&code=' . $request->input('code'); 
    $data .= '&client_id=id_here'; 
    $data .= '&client_secret=secret_here'; 
    $data .= '&redirect_uri=http://localhost:8000/oauth'; 
    $data .= '&scopes=openid user.read'; 
    $additional_headers = array(
     'Content-Type' => 'application/x-www-form-urlencoded' 
    ); 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $additional_headers); 
    $server_output = curl_exec ($ch); 
    dd($server_output); 

しかし、このCURLリクエストの出力/応答が 'token_id' オブジェクトを与えているようCURLリクエストを作ってるんです。 access_tokenの代わりに& expiry_in ...

答えて

0

アクセストークンを作成しないでください。これは、認証プロバイダ(この場合はMicrosoft)によって提供されます。あなたが技術的に認証コードを受け取るauthorization_code流れと

。次に、その認証コードをサーバーに送信して、アクセストークンと交換します。そのアクセストークンを呼び出しのAuthorizationヘッダーにMicrosoft Graph APIに渡します。

私はv2エンドポイントで、OAUTHプロセスが役立つ認可コードフロー(Microsoft v2 endpoint primer)でどのように機能するかを説明しています。

UPDATE:

あなたは認証コードの付与を実行するためにcurlのようなツールを使用することはできません。 /authorizeへの最初の呼び出しは、GETであり、ユーザーがログインするWebページになります。これが完了すると、認証プロバイダはユーザをWebサーバにリダイレクトしてからPOST/tokenエンドポイントに発行します。

あなたがcurl(またはその他のクライアント側スクリプト)を使用する場合は、暗黙の補助金を使用する必要があります。私はこのために同様の散歩を持っています:v2 Endpoint and Implicit Grant

+0

あなたはあなたの記事の中で、同じ手順に従っています。しかし、認証コードを取得して、アクセストークンのPOSTリクエストを開始すると、上記のエラーが発生します。そのURLにPOSTリクエストを行うために何が使えますか教えてください。現在、私はこのプロバイダを使用しています。 リーグ\のOAuth2 \クライアント\プロバイダーの\ GenericProvider " –

+0

すみません、私はあなたが「上記のエラー」で、あまりにも言及していたエラーが表示されません。 –

+0

これで、curlでPOSTリクエストを作成できました。しかし今、私はid_tokenの応答を返されましたが、期待されたものは返されませんでした。 –

関連する問題