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;
}
}
}