我知道你可以在asp .net core中进行身份验证和授权。例如,您可以使用授权属性拒绝对某些资源的访问。
例如,如果用户尝试访问无法访问的资源,那么他可能会被重定向到登录页面。
但是我看到asp .net core中有一个叫做Challenge的概念。我不知道它在这一切中适合什么。据我了解,如果用户未登录,它可以将他重定向到可以登录的页面。
这在官方文档中有介绍:
当未经身份验证的用户请求需要身份验证的端点时,授权会调用身份验证质询。例如,当匿名用户请求受限资源或点击登录链接时,就会发出身份验证质询。授权使用指定的身份验证方案调用质询,如果未指定,则使用默认方案。请参阅ChallengeAsync。身份验证质询示例包括:
- 将用户重定向到登录页面的 cookie 身份验证方案。
- JWT 承载方案返回带有
标头的 401 结果。www-authenticate: bearer
质询操作应该让用户知道使用什么身份验证机制来访问所请求的资源。
了解一个“陷阱”很重要。
我使用
return Challenge()
作为return RedirectToPage("/Auth/Login")
的简写,但遇到了很多问题。这是因为它重定向到默认登录页面 AND 添加当前 URL 路径作为“返回”参数,例如https://www.example.com/login?ReturnUrl=%2Ffoo%2Fbar
。
因此请适当使用
Challenge()
。