- 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/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!