我有一个asp.net web api 2,它使用AAD(Azure AD)对用户进行身份验证。目前我只有一个访问api的角度Web应用程序。 adal.js正在处理用户的身份验证,这是有效的。现在我试图添加一个winforms应用程序,它也可以针对相同的AAD进行身份验证。这也有效,这意味着我获得了一个auth-token,但是当我调用它时,它会返回一条401消息。我查看了Azure AD samples at github并根据它们编写了代码。
在web api中,我在Startup.Auth.cs中有以下代码:
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Audience = ConfigurationManager.AppSettings["ida:Audience"],
Tenant = ConfigurationManager.AppSettings["ida:Tenant"]
});
从Azure AD复制受众和租户密钥。
我在Winforms应用程序中使用以下代码:
string authority = "https://login.microsoftonline.com/{TenantID}";
string resourceURI = "APP ID URI from the Web API registered in Azure AD";
string clientID = "Client ID from the WinForms Application registered in Azure AD";
Uri returnUri = new Uri("Registered return uri");
AuthenticationContext _ac = new AuthenticationContext(authority);
AuthenticationResult _arr = _ac.AcquireToken(resourceURI, clientID, returnUri);
回顾一下,我可以在winforms应用程序中验证用户,但是当我从API请求数据时,api会响应401错误。我检查了http请求,并且令牌被注入到请求中。
谢谢你们的帮助
答案 0 :(得分:0)
您是否确定将两个应用程序(Web API和WinForm应用程序)与AAD应用程序相关联,并且您已授予WinForm应用程序访问Web API的权限?
https://github.com/Azure-Samples/active-directory-dotnet-native-multitarget中提供了一个很好的例子。