Azure AD令牌服务不响应refresh_token和id_token

时间:2016-09-04 12:14:18

标签: c# azure oauth-2.0 azure-active-directory

我正在尝试使用Outlook REST API。我必须通过Azure AD进行身份验证,我有一个小问题。当我将FatalThrowableError in RegistersUsers.php line 32: Call to undefined method Illuminate\Auth\TokenGuard::login() 交换为authorization code时,https://login.microsoftonline.com/common/oauth2/v2.0/token的回复不包含我需要的refresh_token和id_token。我的代码发送请求是

access token

此代码的响应示例

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://login.microsoftonline.com/common/oauth2/v2.0/token");
req.Method = "POST";
req.ServicePoint.Expect100Continue = false;
req.UserAgent = "Example/1.0";
req.ContentType = "application/x-www-form-urlencoded";
using (StreamWriter sw = new StreamWriter(req.GetRequestStream()))
{
    string data = "";
    data += "grant_type=authorization_code";
    data += "&code=" + Request.QueryString("code");
    data += "&scope=" + HttpUtility.UrlEncode(string.Join(" ", scopes));
    data += "&redirect_uri=" + HttpUtility.UrlEncode(redirectUri);
    data += "&client_id=" + appId;
    data += "&client_secret=" + appPassword;
    sw.Write(data);
}
HttpWebResponse res = req.GetResponse();
using (StreamReader sr = new StreamReader(res.GetResponseStream()))
{
    Response.ContentType = "application/json";
    Response.Write(sr.ReadToEnd());
    Response.End();
}

我不知道我做的与https://oauthplay.azurewebsites.net不同,因为响应包含所有属性。

1 个答案:

答案 0 :(得分:3)

对于刷新令牌,您在请求授权代码时需要Offline_Access范围,而对于id_token,我猜您需要Profile范围。 id_token基本上是针对应用程序的特定用途,只是为了验证该令牌仅被特定应用程序使用,而其他应用程序没有代表其他应用程序使用该令牌。因此,请尝试请求可能为您提供刷新令牌的offline_access范围。