【发布时间】:2017-09-05 08:39:54
【问题描述】:
我正在编写一个简单的 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。
我面临的困难是,Microsoft 已经多次更改协议和接口,并且混淆了 live.com/outlook.com 和 azure/office365,最终我不知道我应该提供什么访问 live.com/outlook.com 邮箱的权限 url 和资源 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);
【问题讨论】:
-
能否将您的请求中的
scope和response_type分享给Azure AD 进行身份验证? -
我在请求中看不到任何此类属性。我在上面编辑了我的帖子,添加了令牌请求 url。
-
我刚刚注意到您正在使用 ADAL。如果我没记错的话,ADAL 不支持 Azure AD v2.0。我认为您需要使用 MSAL (github.com/AzureAD/microsoft-authentication-library-for-dotnet)。
-
live.com/outlook.com 是否利用 Azure?
-
我不确定我是否理解您的问题。你介意解释一下吗?
标签: c# azure oauth-2.0 adal outlook.com