C# Azure广告获取错误的令牌版本

C# Azure广告获取错误的令牌版本,c#,azure,asp.net-web-api2,azure-active-directory,C#,Azure,Asp.net Web Api2,Azure Active Directory,我的申请是基于 我在wpf申请表登录名和密码中收到令牌,如下所示: result = await _app.AcquireTokenByUsernamePasswordAsync(Scopes, username, securePassword); 然后我想访问我的安全web api。 但当我尝试访问时 AADSTS70002:验证凭据时出错。AADSTS500137:令牌 颁发者与api版本不匹配:无法使用版本1令牌 使用v2端点。记录道ID:42aaa5f8-0a2c-4c3f-a593-

我的申请是基于 我在wpf申请表登录名和密码中收到令牌,如下所示:

result = await _app.AcquireTokenByUsernamePasswordAsync(Scopes, username, securePassword);
然后我想访问我的安全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

这里


我刚刚发现AcquireTokenOnBehalfOfAsync为不同的注册本机应用程序提供v1或v2。我在azure上找不到两个应用程序在配置上的差异。

在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
https://login.microsoftonline.com/tenantid/oauth2/v2.0/token
v2令牌终结点是:

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

在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
https://login.microsoftonline.com/tenantid/oauth2/v2.0/token
v2令牌终结点是:

https://login.microsoftonline.com/tenantid/oauth2/v2.0/authorize
https://login.microsoftonline.com/tenantid/oauth2/v2.0/token
终于成功了

因此,我们有: 本机客户端(名称: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"/>

要使其工作,您需要在WpfApp清单中设置accessTokenAcceptedVersion:2

最终使其工作

因此,我们有: 本机客户端(名称: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"/>


要使其正常工作,您需要在WpfApp manifest(不仅仅在WebApiApp manifest中)accessTokenAcceptedVersion:2

中设置相同的错误,最后我解决了。如果您从Azure AD app registration preview添加客户端应用,它将为您提供v1.0访问令牌,我使用创建了一个新客户端,它将返回v2.0端点。至少它对我有用

参考下图,聚合应用程序下我的angular应用程序为我提供v2.0令牌,azure ad应用程序下的traffic lightapp测试为我提供v1.0令牌


我也犯了同样的错误,最后我发现了。如果您从Azure AD app registration preview添加客户端应用,它将为您提供v1.0访问令牌,我使用创建了一个新客户端,它将返回v2.0端点。至少它对我有用

参考下图,聚合应用程序下我的angular应用程序为我提供v2.0令牌,azure ad应用程序下的traffic lightapp测试为我提供v1.0令牌



您采取了哪些措施来解决问题?您收到了一条特定的错误消息。您是否考虑过解决该错误?您正在请求V1端点(ADAL)的令牌,并试图将其用于使用V2端点(MSAL)的应用程序。@camiloterevinto我猜端点版本在此处设置了_app=new PublicClientApplication(aadClientId,authority);权威是“@danielmann更好地问我没有做什么:)你做了什么来解决问题?您收到了一条特定的错误消息。您是否考虑过解决该错误?您正在请求V1端点(ADAL)的令牌,并试图将其用于使用V2端点(MSAL)的应用程序。@camiloterevinto我猜端点版本在此处设置了_app=new PublicClientApplication(aadClientId,authority);权威是“@danielmann问我更好我没有做什么:)只是检查了一下:应用注册(预览),公共客户端(移动和桌面)重定向url-。然后,我必须通过编辑清单(allowPublicClient:true)手动将其更改为本机客户端。然后我在我的应用程序中检查了它-AcquireTokenByUsernamePasswordAsync给出v1令牌(在jwt.ms中检查)@Amplier,您可以将v1令牌端点更改为v2端点。如何?你能帮我吗?我使用Authority=p.s创建PublicClientApplication。似乎v2只能通过注册。但我可以辩护地说,不知何故,我设法通过portal.azure.com注册了v2。在azure门户中,应用程序注册(预览)也适用于我提到的v2应用程序。您可以通过apps.dev.microsoft.com检查应用程序清单中的
accessTokenAcceptedVersion
值是否为2。如果该值为null或1,则表示您的应用程序将只接受v1令牌。为此,您需要手动将其更改为2以接受v2令牌。将其从null更改为2,AcquireTokenByUsernamePasswordAsync仍然提供v1令牌。顺便说一句,从AcquireTokenByUsernamePasswordAsync为我提供v2令牌的应用程序id在其清单中有accessTokenAcceptedVersion刚刚检查了它:应用程序注册(预览),公共客户端(移动和桌面)重定向url-。然后,我必须通过编辑清单(allowPublicClient:true)手动将其更改为本机客户端。然后我在我的应用程序中检查了它-AcquireTokenByUsernamePasswordAsync给出v1令牌(在jwt.ms中检查)@Amplier,您可以将v1令牌端点更改为v2端点。如何?你能帮我吗?我使用Authority=p.s创建PublicClientApplication。似乎v2只能通过注册。但我可以辩护地说,不知何故,我设法通过portal.azure.com注册了v2。在azure门户中,应用程序注册(预览)也适用于我提到的v2应用程序。您可以通过apps.dev.microsoft.com检查应用程序清单中的
accessTokenAcceptedVersion
值是否为2。如果该值为null或1,则表示您的应用程序将只接受v1令牌。为此,您需要手动将其更改为2才能访问