- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经设置了 Azure 移动应用服务后端,并且有一个 Xamarin 应用使用其服务。它使用 Azure 移动应用服务中的自定义身份验证来注册和验证应用程序的用户。
对于本地开发/调试应用程序的 OWIN 启动类包含一些用于设置应用程序服务的身份验证选项的代码,如 https://azure.microsoft.com/nl-nl/documentation/articles/app-service-mobile-dotnet-backend-how-to-use-server-sdk/#local-debug 中所述。 .
在 Azure 中,启用移动应用服务的身份验证(身份验证/授权),将“请求未经身份验证时采取的操作”选项设置为“允许请求(无操作)”,以便应用程序处理请求验证。
这一切都按预期工作。
现在,我们希望在我们的移动应用服务上支持自定义域,并支持当前的 ourmobileappservice.azurewebsites.net 域。我们已经配置了自定义域,配置了它的 SSL 证书,一切运行良好。新 token 是通过自定义域作为受众/发行者发行的,并且也在该庄园中进行了验证。
但是,当以 ourmobileappservice.azurewebsites.net 作为受众/颁发者颁发 token 时, token 验证期间会被拒绝。似乎只有我们的自定义域被允许作为有效受众。
对于本地开发,我们指定 app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions { ... })
,同时设置 ValidAudiences
属性。因此,我也想在 Azure 环境中使用此设置,以便我们可以为 token 验证指定多个有效受众。 注意:当然,AppServiceAuthenticationOptions
与本地开发不同,例如SigningKey 来自 Azure 的环境变量)。
不幸的是 Azure 似乎根本不使用这个。它仍然以完全相同的方式不断失败。正如您所看到的,只有自定义域被指定为有效受众:
Warning JWT validation failed: IDX10214: Audience validation failed. Audiences: 'https://ourmobileappservice.azurewebsites.net/'. Did not match: validationParameters.ValidAudience: 'https://ourcustom.domain.com/' or validationParameters.ValidAudiences: 'null'.
如何使用自定义身份验证设置配置 Azure 移动应用服务,以便其有效受众同时支持自定义域和之前的 ourmobileappservice.azurewebsites.net?
编辑
为 Azure 指定的有效受众如下:
public static void ConfigureMobileApp(IAppBuilder app)
{
...
app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions
{
SigningKey = Environment.GetEnvironmentVariable("WEBSITE_AUTH_SIGNING_KEY"),
ValidAudiences = new[] { "https://ourcustom.domain.com/", "https://ourmobileappservice.azurewebsites.net/" },
ValidIssuers = new[] { "https://ourcustom.domain.com/", "https://ourmobileappservice.azurewebsites.net/" },
TokenHandler = config.GetAppServiceTokenHandler()
});
...
}
最佳答案
您可以使用自定义身份验证提供程序中您喜欢的任何 URL 对 token 进行签名。您在 AppServiceLoginHandler.CreateToken() 方法中指定的任何内容都将进入 JWT。
在验证 token 时,如果您在本地调试,中间件中指定的 URL 列表将用于验证受众和发行者。在生产环境中,Azure 将神奇地使用您的默认 Azure 域和自定义域。
我的方法是创建一个新的 web.config AppSetting,其中包含所有环境的有效签名 URL。
<add key="ValidUrls" value="https://api.myproductiondomain.com/, https://myproductionapp.azurewebsites.net/, http://localhost:59475/" />
在 Startup.MobilApp.cs 中,我从此列表中填充有效受众和发行者。
MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings();
if (string.IsNullOrEmpty(settings.HostName))
{
// This middleware is intended to be used locally for debugging. By default, HostName will
// only have a value when running in an App Service application.
var validUrls = ConfigurationManager.AppSettings["ValidUrls"].Split(',').Select(u => u.Trim()).ToList();
app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions
{
SigningKey = ConfigurationManager.AppSettings["SigningKey"],
ValidAudiences = validUrls,
ValidIssuers = validUrls,
TokenHandler = config.GetAppServiceTokenHandler()
});
}
现在,在生成 token 之前,在我的登录方法中,我检查当前请求的主机名是否位于同一 AppSetting 白名单中。如果有效,请使用当前主机名作为我的 token 的受众和发行者。
类似这样的东西;
// Get current URL
var signingUrl = $"{this.Request.RequestUri.Scheme}://{this.Request.RequestUri.Authority}/";
// Get list from AppSetting
var validUrls = ConfigurationManager.AppSettings["ValidUrls"].Split(',').Select(u => u.Trim()).ToList();
// Ensure current url is in whitelist
if (!validUrls.Contains(signingUrl))
{
return this.Request.CreateUnauthorizedResponse();
}
var claims = new Claim[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.Id),
};
var signingKey = this.GetSigningKey();
// Sign token with this
var audience = signingUrl;
var issuer = signingUrl;
// Set expirey
var expiry = TimeSpan.FromHours(72);
// Generate token
JwtSecurityToken token = AppServiceLoginHandler.CreateToken(
claims,
signingKey,
audience,
issuer,
expiry
);
关于Azure 移动应用服务 - 自定义身份验证 - 有效受众,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39853261/
我正在尝试在 Firebase 分析中创建一个新的受众群体,其中包括"new"用户,例如使用该应用程序不到两周的用户。 我试图根据“first_open_date”是“>”或“大于”来创建受众,但是当
过去几周,我试图在我的任何 Android 应用程序中显示横幅广告。 如果我将我的设备添加为测试设备,我确实会收到测试横幅。我确实收到了插页式广告 但我没有收到任何横幅。Logcat 在我的任何设备(
我需要从我在 Power Editor 中创建的受众中获取受众 ID,但我找不到检索受众 ID 的方法。我读过 https://developers.facebook.com/docs/referen
我正在尝试在 Azure 中查找有关“允许的 token 受众”的文档,但似乎没有。我在那里放置的值是随 token 返回的资源 ID。 这是什么意思?任何文档链接将不胜感激。PS。实际页面上的学习链
我有一个使用 OWIN JWT 进行身份验证的 C# API。 我的 startup.cs(我的资源服务器)通过代码配置 OAuth: public void ConfigureOAuth(IAppB
我正在使用 Azure 移动应用程序后端 (nodeJS),如所讨论的 here 。我一直使用默认的 Web 设置配置来开发我的移动应用程序,但现在我想自定义云后端功能,因此我使用 Azure-Mob
如何在 AngularJS 中使用 adal.js 从我的 javascript 代码中获取受众 https://management.azure.com 的不记名 token ? 我在 AD 中创建
我的目标是使用 Google 电子表格中的数据作为参数,从 Google Analytics 统计数据中批量创建 AdWords 再营销受众。 我的代码是基于这个 article . API 连接似乎
AspNet.Security.OpenIdConnect.Server 上的示例在我看来,它既像身份验证服务器,又像资源服务器。我想把它们分开。我已经这样做了。 在身份验证服务器的 Startup.
我正在努力在我的身份验证服务器中实现 OAuth 2.0 JWT access_token。但是,我不清楚 JWT aud 声明和 client_id HTTP header 值之间有什么区别。它们是
我将 Google Endpoints 用作在 Google Run 容器服务中运行的 API 网关。 API 路径指向 Google 函数( Node js)。对 API 网关的调用来自 Web 应
我在 postman 和 IdentityServer 4 之间不断收到以下错误 Microsoft.IdentityModel.Tokens.SecurityTokenInvalidAudience
在具有目标 SDK 29 的 Android 应用程序上从 5.11.0 更新到 Facebook Audience 6.2.0 后,我在一小部分 Android 11 设备上看到了大量的崩溃报告。根
我是一名优秀的程序员,十分优秀!