我是C#新手,我在ASP.NetCore 3.1 MVC网络应用程序中与授权作斗争。我知道谷歌上有很多说明,我已经阅读和观看了3天,但无法解决这个问题,因为我发现的每个说明都使用另一种方式,我真的很困惑。
我的系统的想法是:
步骤 1.我将用户名和密码发布到我的API,它将使用JWT令牌进行响应(如果帐户正确)
步骤2.我解码令牌并获取我的网站的用户名,电子邮件,角色,为另一个请求设置HttpClient标头。
我的问题:
这是我的登录方法
[HttpPost, AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel account)
{
string url = "accounts/signin";
var response = await new HttpClientHelper<LoginViewModel>().PostRequest(url, account);
var userToken = JsonConvert.DeserializeObject<UserToken>(response);
Console.Out.WriteLine(userToken.Token);
if (userToken.Token != null)
{
var token = new JwtSecurityToken(jwtEncodedString: userToken.Token);
var userId = token.Claims.First(c => c.Type == "userId").Value;
var username = token.Claims.First(c => c.Type == "unique_name").Value;
var role = token.Claims.First(c => c.Type == "role").Value;
HttpContext.Session.SetString("token", token.ToString());
HttpContext.Session.SetString("userId", userId);
HttpContext.Session.SetString("username", username);
HttpContext.Session.SetString("role", role);
return RedirectToAction("Home", "Index");
}
return RedirectToAction("Login", "Login");
}
我的模型接收来自 API 的响应
public class UserToken
{
public string Token { get; set; }
public string ValidFrom { get; set; }
public string ValidTo { get; set; }
}
仅供参考:我已经从API接收了响应并获得了令牌,但是每次我提出请求时都要设置HttpClient标头。
当用户登录时,如何以及在何处仅设置一次HttpClient头(使用我的令牌)
据我所知,我们不能在用户登录时只设置一次httpclient头。通常,我们可以将令牌存储到会话或cookie中,然后在您想向webapi发送请求时从cookie或会话中读取它。
如果用户尚未登录,如何强制用户停留在登录页面
对于此要求,我建议您可以考虑使用身份验证中间件来实现您的要求。
您可以在这个中间件中检查用户的会话,如果这个用户不包含会话,那么您可以修改登录页面的请求路径。
更多的细节,你可以参考下面的例子:
//Below cods should add after app.usesession in startup.cs Configure method
app.Use((context, next) =>
{
string token = context.Session.GetString("token");
if (token == null)
{
context.Request.Path = "/account/login";
}
return next.Invoke();
});
我有一个Web api终端,它给我JWT令牌。它不是一个完全授权的服务器。它只是可以生成一个JWT令牌。 现在我有另一个用 aspnet 核心编写的 Web 应用程序。其中在启动中.cs我添加了以下行,以便我可以使用收到的 JWT 令牌进行授权 我也有一个登录表单(在web应用程序中),用户输入用户名和密码,我发送到web api并获得令牌。为了保护web应用程序中的任何控制器,我只使用了[Aut
我正在尝试使用JWT身份验证设置一个简单的Angularjs应用程序。 我给新注册的用户发了一封带有jwt令牌链接的邮件,以验证该邮件是否存在。链接如下所示: < code > http://127 . 0 . 0 . 1:3000/verify email/eyj 0 exaioijkv 1 qilchbgcioijiuzi 1 nij 9 . eyj 1c 2 vytmftzsi 6 injp
寻求有关如何进行微服务授权的建议。 我使用spring/spring boot来提供所有的微服务 在使用JWT令牌到达实际微服务之前,我可以通过Spring Cloud网关进行身份验证,但是在授权方面,我不确定如何做到这一点。 我想在内部处理business microservice中每个endpoint的授权。 有没有办法将JWT令牌传递给微服务,或者我需要调用authserver来获取用户中的
我想写一个应用程序,允许与数据交互的两种RESTful形式;常规REST CRUDendpoint和Web-UI。 过去,我在JS中实现了UI的大部分功能,这将调用常规的RESTendpoint。这很好,但对于这个应用程序,我想使用Qute来执行生成页面内容的大部分基本功能。但是,为了正确地管理endpoint并确保正确的RBAC控制,我需要通过cookie而不是普通的头来访问JWT。这似乎是可能
我正在尝试与URL(python客户端)建立websocket连接,该URL需要传入jwt令牌,服务器(在GO中实现)在上侦听该请求,并应该通过解析令牌进行身份验证。 我试着用这部分代码来提出请求- 此请求命中运行此代码以验证此请求的服务器 func ParseFromRequest(req*http.Request,keyFunc-keyFunc)(令牌*令牌,错误){ } 每次,我都会得到“E
如何确定Authorization: Bearer中使用的JWT令牌...是访问令牌或刷新令牌。换句话说,是什么阻止用户在授权头中使用他的JWT刷新令牌而不是访问令牌。 当我在本指南https://github . com/starkandwayne/ultimate-guide-to-uaa/blob/master/docs/refresh-tokens . MD # jwt-refresh-t