首页 文章

AADSTS50020:我们无法从此api版本为Microsoft帐户发出令牌

提问于
浏览
7

我'm writing a simple C# mobile application which I'已在https://apps.dev.microsoft.com/注册访问live.com/outlook.com邮箱(不是outlook 365 mbx) . 我'm using ADAL for authenticating using the client id and redirect URI from the registration. I'我不确定我是否应该从注册网站生成密码以及我应该如何使用生成的密码 . 我遇到的是我得到通常的提示进行身份验证,我提供了我的凭据,我看到一个令牌被返回(RequestSecurityTokenResponse),我的数据(名字,姓氏等)意味着身份验证过程成功但是身份验证过程以错误“ AADSTS50020: We are unable to issue tokens from this api version for a Microsoft account. Please contact the application vendor as they need to use version 2.0 of the protocol to support this. ”结束

我不确定如何解释错误:错误是说我没有使用协议的v2.0,或者它说我没有调用他们的身份验证 endpoints 的v2.0 .

我面临的困难是微软已经改变了很多次协议和接口,并混合了live.com/outlook.com和azure / office365,最后我不知道我应该提供什么作为权威网址以及访问live.com/outlook.com邮箱的资源uri .

我注意到的是,除了身份验证UI之外,我没有获得用户界面,我应该授权应用程序代表我行事 .

Authentication error

下面是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&username=xyz%40hotmail.com&popupui=1&contextid=70F2DEC5506FD639&bk=1491815919&uaid=480c9031b6394304bae56ce1da5a258f&pid=0

这是我用过的代码:

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

1 回答

  • 3

    这里有三件事:

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

    • ADAL不支持V2.0 endpoints . 它得到了MSAL的支持 . 然而,MSAL的开发正在进行中,所以我认为你还没有完全使用它(你应该可以在几周内,甚至那时我认为它不会是GA)

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

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

    注意:这有点微妙,但您也可以拥有AAD访客帐户,这些帐户是Azure Active Directory中的MSA帐户(您创建的用户具有现有的电子邮件地址,可以是MSA) . 这得到了V1.0 endpoints 的支持 - 因此也支持ADAL,但您必须在AAD租户中创建具有这些电子邮件地址的用户,这可能不是您想要的 . 并且还有一些流程,其中MSA将无法工作(例如,当用户进行身份验证以使用本身使用Web服务的Web服务时:代表流程),因此我不建议使用此选项 .

相关问题