Office365 使用范围时“;https://outlook.com/Calendars.ReadWrite" 返回一个空令牌

Office365 使用范围时“;https://outlook.com/Calendars.ReadWrite" 返回一个空令牌,office365,office365api,outlook-restapi,Office365,Office365api,Outlook Restapi,我正在尝试编写一个应用程序,可以在office 365中自动添加/删除/更新事件(日历) 我遵循了以下教程:。通过这种方式,我成功地让应用程序读取邮件和事件 但是,当我尝试添加作用域“”,以便添加事件时,我似乎无法获得有效的授权令牌 当我使用断点时,我看到authResult.Token的值为null。我如何才能获得正确的令牌 public class HomeController : Controller { // The required scopes for our app

我正在尝试编写一个应用程序,可以在office 365中自动添加/删除/更新事件(日历)

我遵循了以下教程:。通过这种方式,我成功地让应用程序读取邮件和事件

但是,当我尝试添加作用域“”,以便添加事件时,我似乎无法获得有效的授权令牌

当我使用断点时,我看到authResult.Token的值为null。我如何才能获得正确的令牌

public class HomeController : Controller
{
    // The required scopes for our app
    // "https://outlook.office.com/calendars.read",
    // "https://outlook.office.com/Calendars.ReadWrite"
    // "https://outlook.office.com/mail.read",
    private static string[] scopes = { "https://outlook.office.com/mail.read",
            "https://outlook.office.com/Calendars.ReadWrite" };

    public async Task<ActionResult> SignIn()
    {
        string authority = "https://login.microsoftonline.com/common";
        string clientId = System.Configuration.ConfigurationManager.AppSettings["ida:ClientID"];
        AuthenticationContext authContext = new AuthenticationContext(authority);

        // The url in our app that Azure should redirect to after successful signin
        Uri redirectUri = new Uri(Url.Action("Authorize", "Home", null, Request.Url.Scheme));

        // Generate the parameterized URL for Azure signin
        Uri authUri = await authContext.GetAuthorizationRequestUrlAsync(scopes, null, clientId,
            redirectUri, UserIdentifier.AnyUser, null);

        // Redirect the browser to the Azure signin page
        return Redirect(authUri.ToString());
    }

    public async Task<ActionResult> Authorize()
    {
        // Get the 'code' parameter from the Azure redirect
        string authCode = Request.Params["code"];

        string authority = "https://login.microsoftonline.com/common";
        string clientId = System.Configuration.ConfigurationManager.AppSettings["ida:ClientID"];
        string clientSecret = System.Configuration.ConfigurationManager.AppSettings["ida:ClientSecret"];
        AuthenticationContext authContext = new AuthenticationContext(authority);

        // The same url we specified in the auth code request
        Uri redirectUri = new Uri(Url.Action("Authorize", "Home", null, Request.Url.Scheme));

        // Use client ID and secret to establish app identity
        ClientCredential credential = new ClientCredential(clientId, clientSecret);

        try
        {
            // Get the token
            var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(authCode, 
                redirectUri, credential, scopes);

            // Save the token in the session
            Session["access_token"] = authResult.Token;

            // Try to get user info
            Session["user_email"] = GetUserEmail(authContext, clientId);

            // return Content("Access Token: " + authResult.Token);
            return Redirect(Url.Action("Inbox", "Home", null, Request.Url.Scheme));
        }
        catch (AdalException ex)
        {
            return Content(string.Format("ERROR retrieving token: {0}", ex.Message));
        }
    }
公共类HomeController:控制器
{
//我们的应用程序所需的作用域
// "https://outlook.office.com/calendars.read",
// "https://outlook.office.com/Calendars.ReadWrite"
// "https://outlook.office.com/mail.read",
私有静态字符串[]作用域={”https://outlook.office.com/mail.read",
"https://outlook.office.com/Calendars.ReadWrite" };
公共异步任务登录()
{
字符串权限=”https://login.microsoftonline.com/common";
字符串clientId=System.Configuration.ConfigurationManager.AppSettings[“ida:clientId”];
AuthenticationContext authContext=新的AuthenticationContext(授权);
//成功登录后Azure应重定向到的应用程序中的url
Uri redirectUri=新的Uri(Url.Action(“Authorize”、“Home”、null、Request.Url.Scheme));
//为Azure signin生成参数化URL
Uri authUri=等待authContext.GetAuthorizationRequestUrlAsync(作用域,null,clientId,
重定向URI,UserIdentifier.AnyUser,null);
//将浏览器重定向到Azure登录页面
返回重定向(authUri.ToString());
}
公共异步任务授权()
{
//从Azure重定向获取“code”参数
字符串authCode=Request.Params[“code”];
字符串权限=”https://login.microsoftonline.com/common";
字符串clientId=System.Configuration.ConfigurationManager.AppSettings[“ida:clientId”];
字符串clientSecret=System.Configuration.ConfigurationManager.AppSettings[“ida:clientSecret”];
AuthenticationContext authContext=新的AuthenticationContext(授权);
//与我们在身份验证代码请求中指定的url相同
Uri redirectUri=新的Uri(Url.Action(“Authorize”、“Home”、null、Request.Url.Scheme));
//使用客户端ID和密码建立应用程序标识
ClientCredential=新的ClientCredential(clientId,clientSecret);
尝试
{
//拿到代币
var authResult=等待authContext.AcquireTokenByAuthorizationCodeAsync(authCode,
重定向URI、凭据、作用域);
//在会话中保存令牌
会话[“访问令牌”]=authResult.token;
//尝试获取用户信息
会话[“用户电子邮件”]=GetUserEmail(authContext,clientId);
//返回内容(“访问令牌:+authResult.Token”);
返回重定向(Url.Action(“收件箱”,“主页”,null,Request.Url.Scheme));
}
捕获(ADALEX)
{
返回内容(string.Format(“检索令牌时出错:{0}”,例如Message));
}
}