相当于在没有浏览器的情况下将cookie存储在移动应用程序上



我想知道在移动应用程序上存储密钥以进行会话身份验证的机制。我有一个Tornado网络服务器,它将使用第三方外部服务来验证用户的身份,例如Facebook或Google。我熟悉在使用浏览器时使用set_secure_cookie存储 Cookie。但是,如果移动应用程序现在正在连接并进行身份验证,该怎么办?我将使用什么机制来存储机密(如安全 cookie(以供将来的会话身份验证?下面显示了用于验证用户的代码:

class GoogleOAuth2LoginHandler(tornado.web.RequestHandler,
tornado.auth.GoogleOAuth2Mixin):
async def get(self):
if self.get_argument('code', False):
user = await self.get_authenticated_user(
redirect_uri='http://your.site.com/auth/google',
code=self.get_argument('code'))
# Save the user with e.g. set_secure_cookie
else:
await self.authorize_redirect(
redirect_uri='http://your.site.com/auth/google',
client_id=self.settings['google_oauth']['key'],
scope=['profile', 'email'],
response_type='code',
extra_params={'approval_prompt': 'auto'})

对于不依赖浏览器和 cookie 支持的移动应用程序,如何修改这一点?

在 iOS 中,NSHTTPCookie 类中有一个 API,您可以在其中保存整个 http 响应字符串。 代码将如下所示以创建一个cookie。

if let requestUrl = url {
let httpCookies = HTTPCookie.cookies(withResponseHeaderFields: response.allHeaderFields as! [String : String], for: requestUrl)
}

然后你可以保存饼干,

HTTPCookieStorage.shared.setCookies(httpCookie, for: url, mainDocumentURL: url)

如果需要,您还可以访问此 Cookie 并将其设置为网络视图。

我不知道这是否是您要找的,但是您可以使用SharedPreferences系统,它非常简单,并允许保存本地密钥对值以存储任何有用的信息。

使用Android,您可以使用SharedPreferences或EncryptedSharedPreferences来添加额外的安全层...

在iOS中,您拥有大致相同的机制,称为NSUserDefaults,该机制还允许存储密钥对值,还允许额外的安全层。

最新更新