我有一个.NET Core网站。它使用ASP.NET身份。我现在正在为该网站构建一个Xamarin应用程序。我已将令牌发行者操作实施到现有的帐户控制器中,因此我可以对该站点进行授权调用。
// POST: /Account/Token
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> Token(LoginViewModel model)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindByEmailAsync(model.Email);
if (user != null)
{
var result = await _signInManager.CheckPasswordSignInAsync
(user, model.Password, lockoutOnFailure: false);
if (!result.Succeeded)
{
return Unauthorized();
}
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, model.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("A Super Security Key"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "Issuer",
audience: "IssuerA",
claims: claims,
expires: DateTime.Now.AddDays(7),
signingCredentials: creds);
return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });
//return new JwtSecurityTokenHandler().WriteToken(token);
}
}
return BadRequest("Could not verify username and password");
}
这似乎有效。我可以通过邮递员的请求获得令牌。
所以,我现在需要实现一个控制器来使我的应用程序调用令牌。我试图添加一个标准控制器 -
public class TestController : Controller
{
[HttpGet]
//[Authorize]
[AllowAnonymous]
public IActionResult Test()
{
return Ok("test");
}
}
如果我是AllowAnonymous,这只会被调用。如果我启用授权,它将不会返回我未经授权,甚至输入请求中包含的令牌。
我想我应该以某种方式添加API控制器,这是正确的吗?我该怎么做呢?欢迎任何其他建议。这是我目前的布局: