oauth2.0 将SecureStorage用于承载令牌

7cjasjjr  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(142)

我可以访问一个自定义服务器端点,该端点能够使用存储在该服务器上的客户端密钥代理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是加密的,但是是什么阻止了任何人附加到这个进程或跟踪到这个方法,并看到它像白天一样明显呢?代码混淆可能会使它在这一点上不那么明显,但不是真的。
“我感觉自己好像漏掉了什么重要的东西,什么才是最好的做法,怎么才能在不增加攻击面的情况下消耗令牌?”

whlutmcx

whlutmcx1#

正如Raymond Chen在类似情况下所讽刺的那样,这涉及到在密封舱口的另一边。可以跟踪您的进程并从中转储字符串的人很可能会做更有趣的事情,而不是窃取短暂的他们是短暂的,不是吗?)不记名令牌。事实上,将不记名令牌存储在任何地方都会增加攻击面,因为后者现在包括你用来存储令牌的系统,以及你的进程和它运行的系统。只要把令牌保存在内存中,重启后重新请求新的令牌即可。

相关问题