using AuthStudy.Authentication.Basic.Events; using Microsoft.AspNetCore.Authentication; namespace AuthStudy.Authentication.Basic { public class BasicAuthenticationOptions : AuthenticationSchemeOptions { private string _realm = string.Empty; /// /// 创建用默认值初始化的选项的实例 /// public BasicAuthenticationOptions() { } /// /// 获取或设置在WWW-Authenticate标头中发送的 Realm /// /// /// Realm值(区分大小写)与正在访问的服务器的规范根URL相结合,定义了保护空间。 /// 这些领域允许将服务器上受保护的资源划分为一组保护空间,每个空间都有自己的身份验证方案和/或授权数据库。 /// public string Realm { get { return _realm; } set { if (!string.IsNullOrEmpty(value) && !IsAscii(value)) { throw new ArgumentException("Realm must be US ASCII"); } _realm = value; } } /// /// 获取或设置一个标志,该标志指示是否将在未经授权的响应上取消WWW-Authenticate标头 /// /// /// 身份验证方案控制浏览器UI,并允许浏览器以正确的方式进行身份验证,弹出一个允许输入用户名和密码的UI /// 有些用户可能希望对JavaScript XMLHttpRequest请求抑制这种行为 /// 将此标志设置为True将抑制WWW-Authenticate标头,从而抑制浏览器登录提示,只需发送401状态代码,您就必须对自己做出反应。 /// public bool SuppressWWWAuthenticateHeader { get; set; } /// /// 获取或设置一个标志,该标志指示处理程序是否会提示对HTTP请求进行身份验证 /// public bool AllowInsecureProtocol { get; set; } = true; /// /// 事件 /// public new BasicAuthenticationEvents? Events { get { return (BasicAuthenticationEvents?)base.Events; } set { base.Events = value; } } /// /// 判断给定的字符串是否全部是ASCII字符 /// private static bool IsAscii(string input) { foreach (char c in input) { if (c < 32 || c >= 127) { return false; } } return true; } } }