我已经创建了一个API应用程序并将其部署到Azure。该应用程序使用Active Directory身份验证。
我收到以下错误
AADSTS50011: The reply url specified in the request does not match the reply urls configured for the application: 00000000-0000-4f27-0000-00000000.
到目前为止的步骤
我已在网络配置中添加了以下设置
config
<add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}"></add>
<add key="ida:PostLogoutRedirectUri" value="https://myapp.azurewebsites.net/"></add>
api的代码如下
[HttpGet]
[SwaggerResponse(HttpStatusCode.OK,
Type = typeof(IEnumerable<Contact>))]
public async Task<IEnumerable<Contact>> Get()
{
return await GetContacts();
}
答案 0 :(得分:0)
获取Fiddler跟踪,当您尝试对应用程序进行身份验证时浏览器会经历什么。应该向AAD发出请求以要求身份验证的请求,其中还应包括一个答复URL。确保它与您在AAD中配置的应用程序相同。
答案 1 :(得分:0)
是否已在web.config上设置了以下键和值。 key =“ ida:RedirectUri” value =“ https://myapp.azurewebsites.net/”
答案 2 :(得分:0)
遇到相同的错误,解决方法是:
转到Azure门户:https://portal.azure.com登录并单击左侧的Azure Active Directory图标。然后点击中间窗格中的“应用注册”图标。在搜索框中,从错误消息中输入应用程序,然后从下拉菜单中选择“所有应用程序”:
点击您的应用程序,然后点击“设置”图标,从列表中选择“答复网址”。
复制一个回复URL,并将其作为 https 端口添加到您的应用程序中。
您可以从项目的属性中执行此操作,也可以仅在lounchsetting.json文件中添加sslPort值
答案 3 :(得分:0)
在AAD应用程序注册上,将AAD身份验证回调附加到您的Reply URI值。最初,我将我的设置为:
https://my-app.azurewebsites.net
然后我将其更新为:
https://my-app.azurewebsites.net/.auth/login/aad/callback
之后,该错误已清除,我可以调用我的API端点。
答案 4 :(得分:0)
我在学习 MS 教程 Call the Microsoft Graph API from a Windows Desktop app 时遇到了同样的问题。我的代码中没有提供重定向 url 的地方,除了这一行
.WithDefaultRedirectUri();
将鼠标悬停在它上面时,我可以看到 https://login.microsoftonline.com/common/oauth2/nativeclient,这是一个重定向 uri,存在于我的 Azure 应用程序中。这一切都非常令人困惑,我在网上的任何地方都没有找到答案。经过大约 3 个小时的搜索答案并在代码中尝试了多种可能性后,我在我下载的文件之一中发现了此评论:
// Requires redirect URI "ms-appx-web://microsoft.aad.brokerplugin/{client_id}" in app registration
所以我去了 https://ms.portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Authentication/appId/171axxxx-xxxx-xxxx-xxxx-xxxxxxxxafff/isMSAApp/ 并在 Authentication >Redirect URIs 下添加了重定向 URI ms-appx-web://microsoft.aad.brokerplugin/171axxxx-xxxx-xxxx-xxxx-xxxxxxxxafff。
接下来我像这样修改了我的代码:
public partial class App : Application
{
// Below are the clientId (Application Id) of your app registration and the tenant information.
// You have to replace:
// - the content of ClientID with the Application Id for your app registration
// - The content of Tenant by the information about the accounts allowed to sign-in in your application:
// - For Work or School account in your org, use your tenant ID, or domain
// - for any Work or School accounts, use organizations
// - for any Work or School accounts, or Microsoft personal account, use common
// - for Microsoft Personal account, use consumers
private static string ClientId = "171axxxx-xxxx-xxxx-xxxx-xxxxxxxxafff";
// Note: Tenant is important for the quickstart.
private static string Tenant = "72f9xxxx-xxxx-xxxx-xxxx-xxxxxxxxdb47"; //also works with "common"
private static string Instance = "https://login.microsoftonline.com/";
private static IPublicClientApplication _clientApp;
static App()
{
CreateApplication(true);
}
public static void CreateApplication(bool useWam)
{
//initialize MSAL
var builder = PublicClientApplicationBuilder.Create(ClientId)
.WithAuthority($"{Instance}{Tenant}")
.WithDefaultRedirectUri();
if (useWam)
{
builder.WithExperimentalFeatures();
builder.WithBroker(true); // Requires redirect URI "ms-appx-web://microsoft.aad.brokerplugin/{client_id}" in app registration
}
_clientApp = builder.Build();
TokenCacheHelper.EnableSerialization(_clientApp.UserTokenCache);
}
public static IPublicClientApplication PublicClientApp { get { return _clientApp; } }
}
我不知道为什么 Azure 不只是将其添加到其他重定向中,因为他们知道需要这样做,或者至少将这一步包含在说明中,但希望这对其他人有帮助错误。