Azure AD获取错误的令牌版本

时间:2019-01-20 15:55:51

标签: c# azure asp.net-web-api2 azure-active-directory

我的申请基于this example 我在wpf应用程序登录名和密码中收到令牌是这样的:

   <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="text" ng-model="user.password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>

然后我要访问我的安全Web API。 但是当我尝试访问时,我会得到

  

AADSTS70002:验证凭据时出错。 AADSTS500137:令牌   发行者与api版本不匹配:无法使用版本1令牌   与v2端点。跟踪ID:42aaa5f8-0a2c-4c3f-a593-1676fd662700   相关ID:efe97d3a-ca2f-4dfe-a50c-5c3f4accde9a时间戳记:   2019-01-20 15:52:16Z

这里

result = await _app.AcquireTokenByUsernamePasswordAsync(Scopes, username, securePassword);

我刚发现的是AcquireTokenOnBehalfOfAsync为不同的注册本机应用程序提供v1或v2。我找不到这两个应用程序之间的天蓝色配置差异。

3 个答案:

答案 0 :(得分:1)

在Azure门户中,应用程序注册(预览)用于在v2终结点中注册一个应用程序,应用程序注册用于在v1终结点中注册一个应用程序。

v1授权端点如下:

> https://login.microsoftonline.com/tenantid/oauth2/authorize?

v1令牌端点:

https://login.microsoftonline.com/tenantid/oauth2/token

v2授权端点为:

https://login.microsoftonline.com/tenantid/oauth2/v2.0/authorize

v2令牌端点为:

https://login.microsoftonline.com/tenantid/oauth2/v2.0/token

答案 1 :(得分:1)

我遇到了同样的错误,最后我发现了。如果从Azure AD应用程序注册预览添加客户端应用程序,它将为您提供v1.0访问令牌,我使用https://apps.dev.microsoft.com/创建了一个新客户端,它将返回v2.0端点。至少对我有用。

请参见下面的图片,融合应用程序下的我的角度应用程序给了我v2.0令牌,而天蓝色广告应用程序下的我的流量应用程序给了我v1.0令牌

My angular app under converged applications giving me v2.0 token & traffic-lightapp-test un is giving me v1.0 token

答案 2 :(得分:0)

最后成功了。

因此,我们拥有: 本机客户端(名称:WpfApp),Web api(名称:WebApiApp)

现在,我们要使用登录名,密码和范围来获取访问令牌!

假设我们的配置是:

<add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}/v2.0"/>
<add key="ida:Tenant" value="organizations"/>
<add key="ida:ClientId" value="xxx-xxx-xxx-xxx"/>
<add key="todo:TodoListScope" value="https://ourdomain.onmicrosoft.com/WebApiApp/access_as_user"/>

要使其正常工作,您需要在 WebApiApp清单(不仅在WebApiApp清单中)中设置accessTokenAcceptedVersion:2