我遇到了 .NET Core 如何在我的生产环境中处理 JSON Web 令牌 (JWT) 身份验证的问题。我正在使用 Postman 进行测试。如果我使用有效的令牌调用我的 API,它可以正常工作并从 API 端点返回预期的响应。但是,如果令牌已过期,我将不会收到预期的 HTTP 401。事实上,我没有收到任何响应,它只是悄悄地失败了。我的生产配置似乎不起作用。如果我在本地开发环境中对此进行测试,我不会遇到任何问题,并且过期的令牌会像预期的那样获得 401 未授权的 HTTP 响应。
我的 Web 应用程序对通过网站登录的人使用 cookie 身份验证,对连接到 API 的人使用 JWT 身份验证。这是 JWT 身份验证的配置。这是在 Startup.cs 中。这是 services.Authentication 的 JWT 配置部分。cookie 身份验证首先设置并且是默认身份验证方案。
.AddJwtBearer(options =>{
options.RequireHttpsMetadata = !_hostingEnvironment.IsDevelopment();
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Settings.Api.JwtBearer.TokenValidation.ValidIssuer,
ValidAudience = Settings.Api.JwtBearer.TokenValidation.ValidAudience,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Settings.Api.JwtBearer.TokenValidation.IssuerSigningKey))
};
options.Events = new JwtBearerEvents()
{
OnAuthenticationFailed = context => …Run Code Online (Sandbox Code Playgroud) 每当Visual Studio向TFS发出Web请求时,Fiddler都会显示401 Unauthorized错误.然后,Visual Studio将使用适当的Authorization Negotiate标头再次尝试,TFS将使用正确的数据和200状态代码进行响应.
如何在第一次停止401时获取正确的标头?
我有一个jquery getjson的问题.
这段代码有效
$.getJSON('http://twitter.com/status/user_timeline/USERNAME.json?count=10&callback=?', function(twitter_data)
{
alert('works');
});
Run Code Online (Sandbox Code Playgroud)
这段代码不?
$.getJSON('https://api.twitter.com/1/account/verify_credentials.json?callback=?', function(twitter_data)
{
alert('no alert ?');
});
Run Code Online (Sandbox Code Playgroud)
但为什么?有任何想法吗?
示例 - > http://jsfiddle.net/4wWJW/2/
提前谢谢!
彼得
我正在尝试向使用BASIC身份验证和https保护的服务发送HTTP GET请求.如果我使用RESTClient Firefox插件这样做没有问题.我正在定义basic-header并将GET发送到url,我得到了答案(json中的数据).
现在我正在使用C#中的Windows应用商店应用程序来使用该服务.我在清单中启用了所有必需的功能,并编写了以下方法:
private async void HttpRequest()
{
string basic = "Basic ...........";
Uri testuri = new Uri(@"https://...Servlet");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", basic);
Task<HttpResponseMessage> response = client.GetAsync(testuri);
var text = await response;
var message = text.RequestMessage;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了许多不同的可能性,例如获取响应字符串但是所有内容都会导致服务器发出401状态代码答案.
我查看了许多类似的问题,我对通信的理解如下:客户端请求 - >服务器响应401 - >客户端发送授权标头 - >服务器响应200(确定)
我不明白为什么我得到401"未授权"状态代码,虽然我在开始时发送授权标题.如果有人知道如何在RESTClient中处理它,那将会很有趣.
BASIC标题是完全正确的我将它与RESTClient中的标题进行比较.
如果有人可以帮助我,这将是很好的.
在此先感谢您的亲切问候,Max
c# basic-authentication http-status-code-401 dotnet-httpclient
当我请求[授权]装饰的控制器操作而不是重定向到登录页面时,我收到401错误.
这是一个使用IIS Express上运行的身份模板的.net核心mvc应用程序.
当我从program.cs运行应用程序时,重定向到登录工作正常.我已经为cookie身份验证添加了明确的指示,以便在配置和服务部分使用/ Account/Login重定向,以及配置Identity来执行此重定向.
我无法让它发挥作用.下面是我的StartUp类,我应该更改什么才能使它在IIS express中运行?:
public class Startup
{
private MapperConfiguration _mapperConfiguration { get; set; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
// For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
_mapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new AutoMapperProfileConfiguration());
});
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the …Run Code Online (Sandbox Code Playgroud) redirect http-status-code-401 iis-express asp.net-identity asp.net-core-mvc
asp.net-core ×1
c# ×1
getjson ×1
iis-express ×1
jquery ×1
jwt ×1
redirect ×1
tfs ×1
tfs2008 ×1