我想实现一些工作流程,他们应该向Microsoft todo应用添加一些任务。
他们有一个休息API。我尝试访问oauth。但是返回网址有误。而且我不想有一个浏览器应用程序,它应该只是在后台运行的php脚本。
我尝试过:
$url = oAuthService::getLoginUrl("http://localhost/microsoftToDoTest/auth.php");
header("location:".$url);
class oAuthService {
private static $clientId = "";
private static $clientSecret = "";
private static $authority = "https://login.microsoftonline.com";
private static $authorizeUrl = '/common/oauth2/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code';
private static $tokenUrl = "/common/oauth2/token";
public static function getLoginUrl($redirectUri) {
$loginUrl = self::$authority.sprintf(self::$authorizeUrl, self::$clientId, urlencode($redirectUri));
error_log("Generated login URL: ".$loginUrl);
return $loginUrl;
}
}
在Microsoft服务上使用php授权的正确方法是什么?
预先感谢
答案 0 :(得分:2)
查看您的代码和文档,我假设您需要请求令牌才能创建有效的会话。然后在具有会话ID的cookie中的URL上提供该令牌。
Route::get('/authorize', 'AuthController@gettoken');
Microsoft现在在其文档中提供了以下内容:
public function signin()
{
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// Initialize the OAuth client
$oauthClient = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => env('OAUTH_APP_ID'),
'clientSecret' => env('OAUTH_APP_PASSWORD'),
'redirectUri' => env('OAUTH_REDIRECT_URI'),
'urlAuthorize' => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'),
'urlAccessToken' => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'),
'urlResourceOwnerDetails' => '',
'scopes' => env('OAUTH_SCOPES')
]);
// Generate the auth URL
$authorizationUrl = $oauthClient->getAuthorizationUrl();
// Save client state so we can validate in response
$_SESSION['oauth_state'] = $oauthClient->getState();
// Redirect to authorization endpoint
header('Location: '.$authorizationUrl);
exit();
}
https://docs.microsoft.com/en-us/outlook/rest/php-tutorial微软可能在Office365周围使用相同的方法。希望这将帮助您实现正确的代码。