10

我正在编写一个简单的 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 地址的传出请求。

https://login.live.com/ppsecure/post.srf?wa=wsignin1.0&wtrealm=urn%3afederation%3aMicrosoftOnline&wctx=estsredirect%3d2%26estsrequest%3drQIIARWPsU7CQABAubaQghqRaIIbAy6aa3uFttwlDmog0gEGXSQu19JCY8thbcU4ObjLBzg5OpjoYAyf4MRiYtg00RhmTRzF5SVvey8zV5JQScISQqqeA2idRxIiRYoMS8cUQ8VANixj14HUxSp0DAuXKmXVsh0tzGWyaDi_ix-FndGH_zZprV09ATAG4AuACw5MuMXmVhx11X-w0Dt3plzSZx2vd8sXu1HUPyGyzOLIZ-xIYq7r2Y5ks0AOqOdLoUPbD3xq5gHrjfiihjVLN7QStPU2hmWDupAirQJtza5gRbeo5rZfeTAWwFRYEfnsQj5d-BQVnohiKsvlE4XErwBukrPk7aX3-7vD5eblwc_1y_d-4jkp980qik_7x11crwaBKesmrQ-qhhm2VKaE- 2Fto7XXsNBZo9bZRAQNU2CUXo3DHvGcyCWDDmF0tkhUSSGMWX81&wfresh=0&id=&pcexp=false&用户名=xyz%40hotmail.com&popupui=1&contextid=70F2DEC5506FD639&bk=1491815919&uaid=480c9031b63923084&b

这是我使用的代码:

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);
4

1 回答 1

6

这里有三件事:

  1. 使用https://apps.dev.microsoft.com网站创建的应用程序以AAD v2.0 端点为目标,而不是 v1.0 端点(它们是不同版本的协议)

  2. ADAL 不支持 V2.0 端点。它受 MSAL 支持。但是 MSAL 的开发正在进行中,所以我认为你还不能完全使用它(你应该可以在几周内使用它,即使那样我也不认为它会是 GA)

  3. V2.0 端点支持直接使用 MSA 帐户进行身份验证,因此支持 MSAL,而不是 ADAL。ADAL 仅支持 ADFS 和 AAD

我了解到您想使用 MSA 帐户(实时)进行身份验证,因此您需要使用 MSA。如果可以的话,我建议你稍等一下

注意:这有点微妙,但您也可以在 Azure Active Directory 中拥有作为 MSA 帐户的AAD 来宾帐户(您创建一个具有现有电子邮件地址的用户,这可能是一个 MSA)。V1.0 端点支持这一点,因此也支持 ADAL,但您必须在 AAD 租户中使用这些电子邮件地址创建用户,这可能不是您想要的。还有一些 MSA 不起作用的流程(例如,当用户进行身份验证以使用本身使用 Web 服务的 Web 服务时:代表流程),所以我不推荐这个选项。

于 2017-04-12T09:24:49.877 回答