为什么我收到错误 AADSTS50011:请求中指定的回复 url 与为应用程序配置的回复 url 不匹配?
Why am I getting the error AADSTS50011: The reply url specified in the request does not match the reply urls configured for the application?
我知道之前有人问过这个问题,但到目前为止我所读的内容似乎都无法解决问题。当我尝试 运行 我的 ASP.NET 核心应用程序收到以下错误消息。
AADSTS50011: The reply URL specified in the request does not match the
reply URLs configured for the application
我已经使用 Azure 门户给我的指南设置了我的身份验证。我会告诉你我目前拥有的东西。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options => {
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/";
options.TokenValidationParameters.ValidateIssuer = false;
});
services.AddAuthorization(options =>
{
options.AddPolicy("NorwayTeam", policyBuilder => policyBuilder.RequireClaim("groups", "111-222-333-444-555"));
});
//MVC
services.AddMvc(options => {
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
...[shortened for brevity]
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub");
routes.MapHub<VesselHub>("/vesselHub");
routes.MapHub<RequirementHub>("/requirementHub");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
我也把相关代码放在我的 appsettings.json
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "MyCompany.onmicrosoft.com",
"TenantId": "xxx",
"ClientId": "xxx",
"CallbackPath": "/signin-oidc"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
因此,从应用程序的角度来看,以上代码是连接到我的应用程序注册所需的全部。显然,我在相关控制器中放置了 [Authorize]
。
下一步是在我的 Azure 门户中设置应用程序注册。我将我的应用程序注册设置更改为以下内容,模糊区域使用我的网络应用程序的 URL,即 https://MyCompany.azurewebsites.net/
。因为这是我的应用程序的生产版本,所以我不想使用 localhost
.
部分我认为问题可能与流氓本地主机声明有关,但我不能确定,因为我看不到应用程序对应用程序注册发出的请求。有谁知道我做错了什么?
这个问题很容易定位,当您访问您的应用程序url(https://MyCompany.azurewebsites.net/
)时,您将被重定向到登录页面。
解码授权请求url,你会发现redirect_uri。
有点像
https://login.microsoftonline.com/XXX/oauth2/authorize?client_id=XXX&redirect_uri=http://localhost:59775/signin-oidc&response_type=id_token&scope=openid profile
复制 redirect_uri 的值并将其粘贴到 Azure 门户,然后重试。
我设法解决了这个问题。在所有这些设置过程中,我没有意识到的是,Azure 中的单个应用程序注册可以为 localhost
和您的 production
注册多个 return URL环境。
为了使这个应用程序正常工作并克服错误,我只是为 production
和 staging
添加了一个额外的 URL 设置到应用程序注册,从而使我能够进行身份验证在所有途径上。请看下面。
就我而言,我在浏览器中输入:
mysite.azurewebsites.net
但是 Chrome 正在用 http
完成 url。当我手动输入时:
https://mysite.azurewebsites.net
问题解决了。
我知道之前有人问过这个问题,但到目前为止我所读的内容似乎都无法解决问题。当我尝试 运行 我的 ASP.NET 核心应用程序收到以下错误消息。
AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application
我已经使用 Azure 门户给我的指南设置了我的身份验证。我会告诉你我目前拥有的东西。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options => {
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/";
options.TokenValidationParameters.ValidateIssuer = false;
});
services.AddAuthorization(options =>
{
options.AddPolicy("NorwayTeam", policyBuilder => policyBuilder.RequireClaim("groups", "111-222-333-444-555"));
});
//MVC
services.AddMvc(options => {
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
...[shortened for brevity]
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub");
routes.MapHub<VesselHub>("/vesselHub");
routes.MapHub<RequirementHub>("/requirementHub");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
我也把相关代码放在我的 appsettings.json
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "MyCompany.onmicrosoft.com",
"TenantId": "xxx",
"ClientId": "xxx",
"CallbackPath": "/signin-oidc"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
因此,从应用程序的角度来看,以上代码是连接到我的应用程序注册所需的全部。显然,我在相关控制器中放置了 [Authorize]
。
下一步是在我的 Azure 门户中设置应用程序注册。我将我的应用程序注册设置更改为以下内容,模糊区域使用我的网络应用程序的 URL,即 https://MyCompany.azurewebsites.net/
。因为这是我的应用程序的生产版本,所以我不想使用 localhost
.
部分我认为问题可能与流氓本地主机声明有关,但我不能确定,因为我看不到应用程序对应用程序注册发出的请求。有谁知道我做错了什么?
这个问题很容易定位,当您访问您的应用程序url(https://MyCompany.azurewebsites.net/
)时,您将被重定向到登录页面。
解码授权请求url,你会发现redirect_uri。
有点像
https://login.microsoftonline.com/XXX/oauth2/authorize?client_id=XXX&redirect_uri=http://localhost:59775/signin-oidc&response_type=id_token&scope=openid profile
复制 redirect_uri 的值并将其粘贴到 Azure 门户,然后重试。
我设法解决了这个问题。在所有这些设置过程中,我没有意识到的是,Azure 中的单个应用程序注册可以为 localhost
和您的 production
注册多个 return URL环境。
为了使这个应用程序正常工作并克服错误,我只是为 production
和 staging
添加了一个额外的 URL 设置到应用程序注册,从而使我能够进行身份验证在所有途径上。请看下面。
就我而言,我在浏览器中输入:
mysite.azurewebsites.net
但是 Chrome 正在用 http
完成 url。当我手动输入时:
https://mysite.azurewebsites.net
问题解决了。