我有下面的类,将在xamarin.forms移动应用程序中使用 检索OAuth(webapi)生成的令牌。一旦生成,我需要存储 在一个我可以再次访问它而不是一直生成它的地方。 在Pcl中存放这个的最佳位置在哪里?我也希望能够删除一次 用户注销。
class LoginService
{
public async Task Login(string username, string password)
{
HttpWebRequest request = new HttpWebRequest(new Uri(String.Format("{0}Token", Constants.BaseAddress)));
request.Method = "POST";
string postString = String.Format("username={0}&password={1}&grant_type=password",
HttpUtility.HtmlEncode(username), HttpUtility.HtmlEncode(password));
byte[] bytes = Encoding.UTF8.GetBytes(postString);
using (Stream requestStream = await request.GetRequestStreamAsync())
{
requestStream.Write(bytes, 0, bytes.Length);
}
try
{
HttpWebResponse httpResponse = (HttpWebResponse)(await request.GetResponseAsync());
string json;
using (Stream responseStream = httpResponse.GetResponseStream())
{
json = new StreamReader(responseStream).ReadToEnd();
}
TokenResponseModel tokenResponse = JsonConvert.DeserializeObject(json);
return tokenResponse.AccessToken;
}
catch (Exception ex)
{
throw new SecurityException("Bad credentials", ex);
}
}
}
答案 0 :(得分:17)
令牌是敏感信息,我建议以安全的方式存储它们。安全存储可通过iOS中的Keychain
服务和Android中的KeyStore
类获得。 Xamarin对如何使用Xamarin.Auth
进行了很好的article。
其他可用选项包括:
BlobCache.Secure
答案 1 :(得分:6)
这是对任何人进行搜索的更新,因为自从创建此帖子以来情况已经发生了变化。不建议再使用以下内容:
Application.Current.Properties
要安全地存储访问令牌等内容,可以使用 Xamarin.Essentials SecureStorage 静态类。
如果您还没有添加 Xamarin.Essentials nuget软件包,则可以使用它,如下所示:
using Xamarin.Essentials;
.
.
.
await SecureStorage.SetAsync("someKey", "someValue");
var myValue = await SecureStorage.GetAsync("someKey");
您还可以选择
SecureStorage.Remove("someKey");
//or
SecureStorage.RemoveAll();
答案 2 :(得分:1)
Forms有一个内置的Properties字典,您可以在其中存储少量持久数据。
Application.Current.Properties ["token"] = myToken;