我可以访问一个自定义服务器端点,该端点能够使用存储在该服务器上的客户端密钥代理OAuth-2.0流。授权令牌已经交换,现在我持有一个Bearer访问令牌。冲动是将此令牌存储在SecureStorage
中,并(例如)像这样使用它:
private static async Task<Oidc?> userInfoCall()
{
var accessToken =
JsonConvert.DeserializeObject<TokenResponse>(
await SecureStorage.GetAsync(nameof(SecureKeys.ApiToken)))
.AccessToken;
string userinfoRequestURI =
"https://www.googleapis.com/oauth2/v3/userinfo";
HttpWebRequest userinfoRequest =
(HttpWebRequest)WebRequest.Create(userinfoRequestURI);
userinfoRequest.Method =
"GET";
userinfoRequest.Headers.Add(
$"Authorization: Bearer {accessToken}");
userinfoRequest.ContentType =
"application/x-www-form-urlencoded";
userinfoRequest.Accept =
"Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
WebResponse userinfoResponse =
await userinfoRequest.GetResponseAsync();
using (
StreamReader userinfoResponseReader =
new StreamReader(userinfoResponse.GetResponseStream()))
{
string userinfoResponseText = userinfoResponseReader.ReadToEnd();
var rsp = JsonConvert.DeserializeObject<Oidc>(userinfoResponseText);
return rsp;
}
}
字符串
我知道SecureStorage
是加密的,但是是什么阻止了任何人附加到这个进程或跟踪到这个方法,并看到它像白天一样明显呢?代码混淆可能会使它在这一点上不那么明显,但不是真的。
“我感觉自己好像漏掉了什么重要的东西,什么才是最好的做法,怎么才能在不增加攻击面的情况下消耗令牌?”
1条答案
按热度按时间whlutmcx1#
正如Raymond Chen在类似情况下所讽刺的那样,这涉及到在密封舱口的另一边。可以跟踪您的进程并从中转储字符串的人很可能会做更有趣的事情,而不是窃取短暂的他们是短暂的,不是吗?)不记名令牌。事实上,将不记名令牌存储在任何地方都会增加攻击面,因为后者现在包括你用来存储令牌的系统,以及你的进程和它运行的系统。只要把令牌保存在内存中,重启后重新请求新的令牌即可。