我的申请基于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。我找不到这两个应用程序之间的天蓝色配置差异。
答案 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令牌
答案 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