从 Headers 中提取 BasicAuth 用户名 (C# WebService)
Extract BasicAuth username from Headers (C# WebService)
正如标题所说,用户通过 SSL 使用基本身份验证登录并调用 WebService 方法,我想提取身份验证 headers 并在方法函数中使用用户名参数。有没有一种简单的方法可以内联(在方法本身内部)或作为单独项目中的 Class 方法来执行此操作?
.NET 4.5、IIS 7.5
谢谢
经过一番搜索,我发现了一些代码可以满足我的要求:
string authHeader = WebClient.Headers[HttpRequestHeader.Authorization];
if (authHeader != null && authHeader.StartsWith("Basic"))
{
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
return usernamePassword.Substring(0, seperatorIndex);
}
但是编译 Visual Studio 时出现以下错误:non-static 字段、方法或 属性 'System.Net.WebClient.Headers.get'.[= 需要 object 引用12=]
我知道一旦我可以填充 authHeader 字符串,其他一切都会按预期工作,但我正在努力获取实际的 header 值。
终于找到了适合我们的解决方案,希望没有人发现它有任何重大问题,但如果您发现了,请分享。
private string username
{
get{
HttpContext ctx = HttpContext.Current;
string authHeader = ctx.Request.Headers["Authorization"];
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
return usernamePassword.Substring(0, seperatorIndex);
}
}
这似乎解决了我们的问题,我们不想将用户名单独发送到 headers,因为它允许某人更改用户名参数而不影响他们登录的帐户,这样他们登录的帐户就是我们用来创建链接的帐户,并且它有效。
正如标题所说,用户通过 SSL 使用基本身份验证登录并调用 WebService 方法,我想提取身份验证 headers 并在方法函数中使用用户名参数。有没有一种简单的方法可以内联(在方法本身内部)或作为单独项目中的 Class 方法来执行此操作?
.NET 4.5、IIS 7.5
谢谢
经过一番搜索,我发现了一些代码可以满足我的要求:
string authHeader = WebClient.Headers[HttpRequestHeader.Authorization];
if (authHeader != null && authHeader.StartsWith("Basic"))
{
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
return usernamePassword.Substring(0, seperatorIndex);
}
但是编译 Visual Studio 时出现以下错误:non-static 字段、方法或 属性 'System.Net.WebClient.Headers.get'.[= 需要 object 引用12=]
我知道一旦我可以填充 authHeader 字符串,其他一切都会按预期工作,但我正在努力获取实际的 header 值。
终于找到了适合我们的解决方案,希望没有人发现它有任何重大问题,但如果您发现了,请分享。
private string username
{
get{
HttpContext ctx = HttpContext.Current;
string authHeader = ctx.Request.Headers["Authorization"];
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
return usernamePassword.Substring(0, seperatorIndex);
}
}
这似乎解决了我们的问题,我们不想将用户名单独发送到 headers,因为它允许某人更改用户名参数而不影响他们登录的帐户,这样他们登录的帐户就是我们用来创建链接的帐户,并且它有效。