Android 使用令牌进行身份验证

Android 使用令牌进行身份验证,android,Android,我读了很多关于身份验证的东西,但我不知道最好的方法是什么 如何创建令牌?我应该使用OAuth2吗? 我是否可以将此令牌存储在SharedReference中,以便在用户关闭/重新打开应用程序以及使用应用程序时保持会话活动?安全吗 我有点迷路了 非常感谢。一般来说,最好存储令牌,而不是密码和用户名。因此,您可以对系统进行身份验证,并执行您需要执行的操作。关于为什么存储密码是个坏主意的更多背景信息:密码通常在多个平台上使用,因此如果攻击者获得一个密码,用户将受到很大的伤害,而令牌将过期,并且可以在没

我读了很多关于身份验证的东西,但我不知道最好的方法是什么

如何创建令牌?我应该使用OAuth2吗? 我是否可以将此令牌存储在SharedReference中,以便在用户关闭/重新打开应用程序以及使用应用程序时保持会话活动?安全吗

我有点迷路了


非常感谢。

一般来说,最好存储令牌,而不是密码和用户名。因此,您可以对系统进行身份验证,并执行您需要执行的操作。关于为什么存储密码是个坏主意的更多背景信息:密码通常在多个平台上使用,因此如果攻击者获得一个密码,用户将受到很大的伤害,而令牌将过期,并且可以在没有任何用户交互的情况下经常更新

通常使用OAuth获得令牌,有时还使用初始凭证身份验证。最后,您有一个令牌,可以发送给每个请求,以便服务器知道您是谁


您可以安全地存储这些代币。我希望这会有所帮助。

让用户输入用户名和密码。使用HTTP将它们发送到您的服务器,我使用volley库处理这些事情,在服务器中生成“令牌””、“生成时间””和“生存时间””,并将它们作为响应发送到应用程序。在应用程序中,将所有内容存储在共享首选项中

现在,每次您想要与服务器通信时,请获取实际时间并从中减去生成时间,如果结果小于您的生存时间,请进行通信,否则这意味着令牌已死亡,请用户再次登录并请求新令牌

如何创建令牌

关于这一点,你可以参考我在

从远程web服务(例如Asp.Net web API)获取访问令牌的示例代码:


希望这能给你提供一些你需要的信息。

@mahdipishguy:upvote是表示感谢的另一种方式:)谢谢大家,非常有用,对不起,我不能upvote:/我想你可以upvote,因为你的声誉超过15岁
public static Object getAccessToken(String address, String grant_type, String username, String password) throws Exception {
    List<NameValuePair> params = new ArrayList<>();
    params.add(new BasicNameValuePair("grant_type", grant_type));
    params.add(new BasicNameValuePair("username", username));
    params.add(new BasicNameValuePair("password", password));

    // Making HTTP request
    httpResponse = makeHTTPRequest(address, params);
    if (httpResponse != null) {
        statusCode = httpResponse.getStatusLine().getStatusCode();
        if (statusCode != HttpStatus.SC_OK && statusCode != HttpStatus.SC_BAD_REQUEST) {
            return httpResponse.getStatusLine().toString();
        }

        // Get JSON String (jsonString) from Input Stream (is)
        getJSONFromInputStream();
        if (jsonString.isEmpty()) {
            return null;
        }
        // Parse the JSON String to a JSON Object
        jObj = new JSONObject(jsonString);
    }

    return jObj;
}
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
httpPost.setEntity(new UrlEncodedFormEntity(parameters));