我正在编写一个简单的 C# 移动应用程序,我已在https://apps.dev.microsoft.com/注册以访问 live.com/outlook.com 邮箱(不是 Outlook 365 mbx)。我正在使用 ADAL 进行身份验证,使用客户端 ID 并从注册中重定向 URI。我不确定我是否应该从注册站点生成密码以及我应该如何使用生成的密码。我遇到的是,我得到了通常的身份验证提示,我提供了我的凭据,我看到一个带有我的数据(名字、姓氏等)的令牌被返回(RequestSecurityTokenResponse),这意味着身份验证过程是成功的,但是身份验证过程以错误结束“AADSTS50020:我们无法从此 api 版本为 Microsoft 帐户颁发令牌。请联系应用程序供应商,因为他们需要使用 2.0 版协议来支持此功能。"
我不确定如何解释错误:错误是说我没有使用协议的 v2.0,还是说我没有调用他们的身份验证端点的 v2.0。
我面临的困难是微软已经改变了很多次协议和接口,并且混淆了 live.com/outlook.com 和 azure/office365,最后我不知道我应该提供什么作为权威 url以及访问 live.com/outlook.com 邮箱的资源 uri。
我注意到的是,除了身份验证 UI,我没有获得应该授权应用程序代表我执行操作的 UI。
下面是带有混淆 smtp 地址的传出请求。
这是我使用的代码:
string authority = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
PlatformParameters authParms = new PlatformParameters(PromptBehavior.Always, null);
AuthenticationContext authContext = new AuthenticationContext(authority, TokenCache.DefaultShared);
AuthenticationResult result = await authContext.AcquireTokenAsync(
"https://outlook.office.com/mail.read",
clientId,
new Uri(redirectUri),
authParms);