2

Office 365 でイベント (カレンダー) を自動的に追加/削除/更新するアプリを作成しようとしています。

このチュートリアルに従いました: https://dev.outlook.com/RestGettingStarted/Tutorial/dotnet。このようにして、アプリでメールを読み、イベントを読むことができました。

しかし、スコープ "" https://outlook.office.com/Calendars.ReadWrite " を追加してイベントを追加しようとすると、有効な認証トークンを取得できないようです。

ブレークポイントを使用すると、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));
        }
    }
4

0 に答える 0