1

我正在尝试在客户端(编辑:安装的 Win10 UWP )应用程序中实现此处解释的内容,该应用程序适用于 Outlook.com 用户(没有 O365,没有 Azure)。正如邮件 API 参考中所述,当前的客户端库还不能用于普通 Outlook.com 用户和 v2 应用模型,因此我很想学习如何直接从客户端应用调用 REST API。

具体来说,非常感谢有关如何处理登录和权限请求操作的 ac# 代码示例。目前我知道如何使用 aSystem.Net.Http.HttpClient发送具有指定范围的 GET 请求,以及如何打开 Web 浏览器让用户登录,但是在他们授予权限后没有任何反应,因为浏览器不知道如何处理重定向 uri,这似乎是每个已安装应用程序的标准。结果,我不知道如何在我的应用程序中接收带有授权码的响应消息。

有人可以向像我这样不熟悉这种事情的人解释如何处理这种情况吗?

编辑:正如我上面所说,我正在尝试使用已安装的应用程序,而不是 Web 应用程序。当然问题的底层逻辑是一样的,但我可以使用的库可能不一样。具体来说,我正在开发一个 Windows 10 UWP 应用程序。

4

2 回答 2

0

dev.outlook.com 上的教程适用于 v2 模型和 Outlook.com。客户端库适用于 Outlook.com。这是 ADAL 的已发布版本,不适用于 v2 OAuth 模型。Azure 团队推出了一个“实验性”库,它确实可以工作,Mail API 的客户端库将与它一起工作。

于 2015-09-09T13:43:48.917 回答
0

这是不使用浏览器登录的示例。我们将使用 Outlook api 和 microsoft graph 来实现。我们必须首先登录并获取令牌。

public class AccessTokenModel
    {
        [JsonProperty("access_token")]
        public string AccessToken { get; set; }
    }

public static string GetToken()
            {
                using (HttpClient client = new HttpClient())
                {

                client.BaseAddress = new Uri("https://login.microsoftonline.com");

                var content = new FormUrlEncodedContent(new[]
                {
                new KeyValuePair<string, string>("client_id", 'yourAppId'),
                new KeyValuePair<string, string>("client_secret", 'yourAppPassword'),
                new KeyValuePair<string, string>("grant_type", "password"),
                new KeyValuePair<string, string>("username", "emailAddress"),
                new KeyValuePair<string, string>("password", "emailPassword"),
                new KeyValuePair<string, string>("resource", "https://graph.microsoft.com"),
                new KeyValuePair<string, string>("scope", "openid")
                });

                var result = client.PostAsync($"/common/oauth2/token", content);
                var resultContent = result.Result.Content.ReadAsStringAsync();
                var model = JsonConvert.DeserializeObject<AccessTokenModel>(resultContent.Result);

                return model.AccessToken;

            }
        }

然后我们就可以使用outlook api提供的服务了。

于 2019-03-25T14:35:21.047 回答