- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将基于 token 的身份验证添加到我的 OWIN 中间件,并且可以生成 token 。但是在使用时,带有授权属性的 API 调用的 token 我总是得到“此请求的授权被拒绝”。虽然没有 Authorize 属性,但它工作正常。这是我的 startup.cs 和 Controller 方法。任何想法,有什么问题吗?
启动.cs
public void Configuration(IAppBuilder app)
{
var issuer = ConfigurationManager.AppSettings["issuer"];
var secret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["secret"]);
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = new SimpleAuthProvider(),
AccessTokenFormat = new JwtFormat(issuer)
});
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { "*" },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
}
});
container = BuildDI();
var config = new HttpConfiguration();
config.Formatters.XmlFormatter.UseXmlSerializer = true;
config.MapHttpAttributeRoutes();
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(DefaultAuthenticationTypes.ExternalBearer));
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
app.UseCors(CorsOptions.AllowAll);
app.UseSerilogRequestContext("RequestId");
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(config);
app.UseWebApi(config);
RegisterShutdownCallback(app, container);
}
public class SimpleAuthProvider: OAuthAuthorizationServerProvider
{
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
if (context.UserName != context.Password)
{
context.SetError("invalid_grant", "The user name or password is incorrect");
context.Rejected();
return Task.FromResult<object>(null);
}
var ticket = new AuthenticationTicket(SetClaimsIdentity(context), new AuthenticationProperties());
context.Validated(ticket);
return Task.FromResult<object>(null);
}
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
return Task.FromResult<object>(null);
}
private static ClaimsIdentity SetClaimsIdentity(OAuthGrantResourceOwnerCredentialsContext context)
{
var identity = new ClaimsIdentity(DefaultAuthenticationTypes.ExternalBearer);
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
return identity;
}
}
API Controller 方法:
[HttpGet]
[Route("sampleroute")]
[Authorize]
public async Task<HttpResponseMessage> GetSamples(string search)
{
try
{
HttpResponseMessage response;
using (HttpClient client = new HttpClient(Common.CreateHttpClientHandler()))
{
response = await client.GetAsync("test url");
}
var result = response.Content.ReadAsStringAsync().Result;
Samples[] sampleArray = JsonConvert.DeserializeObject<Samples[]>(result);
var filteredSamples = sampleArray .ToList().Where(y => y.NY_SampleName.ToUpper().Contains(search.ToUpper())).Select(n=>n);
log.Information("<==========Ended==========>");
return Request.CreateResponse(HttpStatusCode.OK,filteredSamples);
}
catch (Exception ex)
{
log.Error($"Error occured while pulling the Samples: {ex.ToString()}");
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.ToString());
}
}
最佳答案
这可能是允许的观众有问题。这里
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
...
AllowedAudiences = new[] { "*" },
...
}
您设置了允许的观众。 token aud
声明将根据 AllowedAudiences
列表进行检查。但是您永远不会向 token 添加任何受众。
在我们的项目中,我使用了基于 http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ 中所示代码的 CustomJwtFormat。
token 将通过调用生成
var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey);
第二个参数负责JWT中的aud
声明:
来自 https://msdn.microsoft.com/en-us/library/dn451037(v=vs.114).aspx :
audience Type: System.String
If this value is not null, a { aud, 'audience' } claim will be added.
在 token 授权中设置 aud
声明后应该可以正常工作。
关于c# - "Message": "Authorization has been denied for this request." OWIN middleware,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398177/
我在 Ubuntu Linux Server 20.04这是我第一次向 Docker 推送东西,所以我只是在本地创建了一个虚拟容器并且它工作了。按照一些在线教程,hello-world示例也可以正常工
尝试将图像推送到 Docker Hub 上的公共(public)存储库时会发生此错误。我尝试过的其他注册表没有问题。 我查看了很多网站、博客,包括 StackOverflow,但仍然没有明确的答案。
我有个问题。我有操作系统 CentOS 5.8 。我在 httpd.conf 文件中写了这个配置: Listen 85 并在文件末尾: ServerName localhost ServerAdmi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
请帮我配置 python 服务器。当我使用 python 命令在 cmd 中执行 .pyw 文件时出现错误我收到错误: IOError: [Errno 13] Permission denied(Pe
我是第一次尝试 CGI 脚本,但没有成功。我已经阅读了很多教程并关注了不同论坛中的主题,但我无法使其正常工作。我在 Fedora 10 机器上使用 appache 网络服务器。我总是有问题 [Wed
在两个文件中使用相同的 mdb.connect 行。使用 debian 7,我的问题现在是向您提供更多详细信息,因为我在问题中使用了很多代码,但我没有什么可告诉的。文件 1 工作正常。 #!/usr/
我正在尝试将数据洞察报告连接到表格和 BigQuery 中的 View 。在 BigQuery 中,表从位于我的云端硬盘中的 GoogleSheet 接收数据, View 正在查询同一个表,但添加了一
我正在尝试为我的 docker hub 存储库创建一个 list ,以便我拥有一个多平台镜像。 我的程序如下: 我首先创建一个空的存储库并向其中推送两个图像,一个用于 amd64,另一个用于 arm6
我正在尝试在我的 arch linux lamp 服务器中使用 fuecms。但是我不能让 htaccess 工作。我的主文件夹是 ytsejam/fuel_cms/.. 这是我的 .htaccess
我有一个简单的docker-compose.yml文件以这种方式定义: version: '3' services: db: image: postgres:10.5-alpine
所以我使用了 testcafe 的默认 docker,它在 docker hub 上是 testcafe/testcafe,我必须运行一些 testcafe 脚本。 但是,我需要将错误触发的屏幕截图上
我在 ubuntu 上使用 Hyperledger Fabric 2.2。我正在尝试借助 article 使用 express.js 创建 REST API . 我的结构网络和 apiserver.j
最近将 macOS Mojave (10.14.4) 上的 Logstash(通过 Homebrew 安装)升级到版本 6.7.0,但事情没有按预期运行。当我尝试通过命令行手动运行它(出于本地开发目的
最近将 macOS Mojave (10.14.4) 上的 Logstash(通过 Homebrew 安装)升级到版本 6.7.0,但事情没有按预期运行。当我尝试通过命令行手动运行它(出于本地开发目的
我的想法是 eclipse-luna 。系统是windows 7旗舰版。我使用 spring security 将 *.jar 复制到我的项目并“添加到构建路径”。请查看有关警告的图片
我在 vmware 播放器上使用 ubuntu 16.04。共享文件夹已启用并且在/mnt/fghs 上可见。但是,所有者(root)不能被 chown 改变。如何改变它?请给我建议。 另外,有人说修
我刚开始学习 SQL 的基础知识,当我在搜索数据操作语言、数据控制语言、数据定义语言时,有些东西没有意义。 据我了解,Data Control Language 有 3 个关键词:Grant、Deny
我要迁移到新服务器,并希望在过渡期间将我的所有站点都脱机。我知道我可以将它放在我的根 .htaccess 文件中以阻止人们访问该站点: order deny,allow deny from all 但
我正在尝试使用 os.Mkdir() 创建一个目录,然后在其中创建文件,类似于这个脚本: package main import ( "log" "os" "path" ) f
我是一名优秀的程序员,十分优秀!