如何从 android 客户端进行经过身份验证的 django rest api 调用?

     2023-03-08     81

关键词:

【中文标题】如何从 android 客户端进行经过身份验证的 django rest api 调用?【英文标题】:How to make authenticated django rest api call from android client? 【发布时间】:2017-12-31 07:52:40 【问题描述】:

我正在制作一个以 django rest api 作为后端的 android 应用程序,并希望使用用户登录时提供的令牌进行经过身份验证的网络调用。

我正在使用改造向后端发出请求。这是我现在正在做的尝试对其余 api 进行经过身份验证的网络调用。

@Override
public void loadAllUsers() 
    Call<List<User>> call = userServiceApi.loadAllUsers();
    call.enqueue(new Callback<List<User>>() 
        @Override
        public void onResponse(@NonNull Call<List<User>> call, @NonNull Response<List<User>> response) 
            if (response.isSuccessful()) 
                List<User> users = response.body();
                eventBus.post(new LoadAllUsersEvent(users));
             else 
                eventBus.post(new FailLoadAllUsersEvent());
                Log.d(TAG, response.message());
            
        

        @Override
        public void onFailure(@NonNull Call<List<User>> call, @NonNull Throwable t) 
            eventBus.post(new LoadUsersUnreachableServerEvent());
            Log.d(TAG, t.toString());
        
    );

这里是这个api请求相关的改造接口:

@GET("users/")
Call<List<User>> loadAllUsers(@Header("Authorization: Token ") Token token);

当我进行此调用时,将用户的令牌作为标头传递,我得到状态代码 401:未验证:“GET /users/ HTTP/1.1”401 58

我做错了什么让 django rest Token Authentication 工作并进行经过身份验证的 django rest api 调用?

【问题讨论】:

你也在使用 OkHttp 吗? 不,我没有使用 OkHttp。 【参考方案1】:

对此的快速解决方法是更改​​您的 api 接口:

@GET("users/")
Call<List<User>> loadAllUsers(@Header("Authorization") Token token);

您传入的值的格式应为"Token %s"

这不是一个很好的解决方案,因为您必须将令牌传递给所有 api 调用。

解决您的授权问题的更好方法是使用OkHttp client 并实施身份验证器,它会为您处理一切。

OkHttp 和 Retrofit 配合得非常好。

【讨论】:

这是一个很好的futurestud.io/tutorials/…,但它是用于改造1的。唯一的区别是RestAdapter被重命名为Retrofit。当然我建议使用最新版本的 OkHttp 和 Retrofit。 所以身份验证标头是否应该包含“令牌 %s”而不是“授权”,因为我已经使用 OkHttp 实现了它,它说“标头名称中的 5 中的意外字符 0x20:令牌 %s”@Andrej尤金 嘿汤姆,标题是键值对。关键是“授权”值是您传递到改造界面的值,字符串应该是“令牌 0b79bab50daca910b000d4f1a2b675d604257e42”。类似的东西。 现在我得到另一个错误。 java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT。它运行 onFailure 方法而不是 onResponse 这意味着您的请求在解析时通过并失败。您的身份验证问题已解决。请关闭问题并继续在别处寻找答案。

如何使用球衣发送经过 NTLM 身份验证的发布请求?

...在使用Java对Sharepoint2013进行restapi调用。如何使用jerseyrest客户端连接到sharepoint2013?注意:目前我使用的是apachehttp组件和NTCredentials 查看详情

如何在对 adwords 进行身份验证后获取客户客户 ID

...7-04-2116:42:23【问题描述】:我在我的应用程序中使用python客户端库。用户通过他的adwords帐户进行身份验证并批准权限。我会检索经过身份验证的用户的客户端客户ID。当用户通过身份验证时,我会获得与用户相关的凭据,并且我... 查看详情

如何使用 Axios 使用经过身份验证的 API

】如何使用Axios使用经过身份验证的API【英文标题】:HowtoconsumeanauthenticatedAPIwithAxios【发布时间】:2020-07-1022:44:41【问题描述】:我正在尝试使用Vue和Laravel构建应用程序。我目前在Laravel中使用护照身份验证进行用户身份验证。... 查看详情

如何进行经过身份验证的服务调用

】如何进行经过身份验证的服务调用【英文标题】:Howtodoauthenticatedservicecall【发布时间】:2012-05-2413:32:47【问题描述】:您好,我正在尝试连接到某些服务器,该服务器将使用用户名和密码作为凭据。以下是我正在使用的代码... 查看详情

如何从 Nuxt 前端访问经过身份验证的 GraphQL API

】如何从Nuxt前端访问经过身份验证的GraphQLAPI【英文标题】:HowtoaccessauthenticatedGraphQLAPIfromNuxtfrontend【发布时间】:2021-02-2301:58:08【问题描述】:我有一个使用Appsync和Cognito(基本电子邮件和密码身份验证)创建的经过身份验证的... 查看详情

如何在 Android 中对 Uber SDK 中的用户进行身份验证?

...Uber开发者网站上注册我的应用程序之前,我得到了我的客户端ID和客户端密码。我在我的应用程序类中添加了以下代码:UberSdk.initialize( 查看详情

如何将 JWT 从客户端传递到我的 API 以进行正确身份验证?

】如何将JWT从客户端传递到我的API以进行正确身份验证?【英文标题】:HowcanIpassaJWTfromtheclientsidetomyAPItobeproperlyauthenticated?【发布时间】:2019-09-1603:26:01【问题描述】:我需要将带有GET、POST、PUT、DELETE方法的JWT从我的UI传递到我... 查看详情

如何在 Node.js 中从请求参数获取经过身份验证的用户到 socket.io

】如何在Node.js中从请求参数获取经过身份验证的用户到socket.io【英文标题】:Howtogetauthenticateduserfromrequestparamtosocket.ioinNode.js【发布时间】:2021-10-2821:22:20【问题描述】:几天来,我一直试图弄清楚如何获取当前用户,以便将其... 查看详情

Symfony:如何从数据库中刷新经过身份验证的用户?

】Symfony:如何从数据库中刷新经过身份验证的用户?【英文标题】:Symfony:HowdoIrefreshtheauthenticateduserfromthedatabase?【发布时间】:2013-11-1121:19:58【问题描述】:例如,我将一个新角色授予控制器中当前经过身份验证的用户,如下... 查看详情

Keycloak 使用不同的客户端重新验证经过身份验证的用户

】Keycloak使用不同的客户端重新验证经过身份验证的用户【英文标题】:KeycloakreauthenticateanAuthenticateduserwithadifferentclient【发布时间】:2021-01-0423:37:21【问题描述】:如果我有一个用户在领域R下使用公共客户端C1使用keycloak进行身... 查看详情

从 Django Rest Framework 中的令牌获取经过身份验证的用户

...我已经设法使用DRF构建了一个小型API。我有我的angular.js客户端发布用户身份验证详细信息,DRF返回一个如下所示的令牌:\'token\':\'9944b 查看详情

Cognito - 如何在与客户端从(通过放大)获得令牌的子域不同的子域上对 nodejs 后端的客户端进行身份验证?

】Cognito-如何在与客户端从(通过放大)获得令牌的子域不同的子域上对nodejs后端的客户端进行身份验证?【英文标题】:Cognito-Howtoauthenticateclientinnodejsbackendonadifferentsubdomainthantheonetheclientobtainedthetokenfrom(throughamplify)?【发布时间... 查看详情

如何在没有客户端身份验证的情况下从服务器验证 Firebase 用户?

】如何在没有客户端身份验证的情况下从服务器验证Firebase用户?【英文标题】:Howtoauthenticateafirebaseuserfromserverwithoutclientsideauth?【发布时间】:2018-03-1911:46:31【问题描述】:我有一个API,它使用nodeadminsdk连接并调用firebase。我的... 查看详情

从 Alexa 向 API 进行身份验证

...fromAlexa【发布时间】:2021-07-1520:38:41【问题描述】:我将如何通过我的API对智能扬声器(Alexa)上的用户进行身份验证?我正在考虑为我的公司开发一种新的Alexa“技能”,它会说允许我的应用程序中的客户询问他们的Alexa“谁是我... 查看详情

如何从 FormRequest 类方法中访问当前经过身份验证的用户

】如何从FormRequest类方法中访问当前经过身份验证的用户【英文标题】:HowtoaccesscurrentauthenticateduserfromwithinFormRequestclassmethod【发布时间】:2015-07-1007:41:56【问题描述】:我有一个用户模型,它有两个功能来检查用户的性别。对于... 查看详情

如何从 Firebase 数据库中获取经过身份验证的用户?

】如何从Firebase数据库中获取经过身份验证的用户?【英文标题】:Howtogetauthenticatedusersfromfirebasedatabase?【发布时间】:2016-11-1713:43:08【问题描述】:我正在创建应用程序,我将在其中使用Firebase消息服务。消息传递工作正常,但... 查看详情

android to django - 如何对用户进行身份验证

】androidtodjango-如何对用户进行身份验证【英文标题】:androidtodjango-howtoauthenticateusers【发布时间】:2011-04-2910:08:41【问题描述】:我正在尝试从django视图中获取json数据(需要登录)进入我正在开发的一个新的安卓应用程序。我... 查看详情

如何使用 Zapier 的 Twitter API 进行身份验证?

...法通过OAuth1.0正确进行身份验证。使用像Postman这样的REST客户端,简直是小菜一碟。您只需传递消费者密 查看详情