首页 > 解决方案 > OAuth 2.0 REST Web API 和 xamarin 表单

问题描述

我根据本教程制作 webservice api https://www.c-sharpcorner.com/article/asp-net-mvc-oauth-2-0-rest-web-api-authorization-using-database-first-approach/我需要使用服务表单 xamarin 表单。但我不知道如何授权客户。

标签: c#asp.netxamarinoauth-2.0

解决方案


在您尝试在代码中授权之前,您应该尝试通过 api 客户端(例如Postman )与您的 API 对话。

您可以在您引用的文章的第 11 步中看到作者实际上正在这样做。

他正在执行以下步骤:

  • 调用令牌端点(无身份验证)
  • 将令牌添加到他的后续请求中

要使用授权调用 API,您必须首先知道 auth 方法(基本、OAuth 等)。在这种情况下,您说的是 OAuth:

看看指南,它分享了这张图片: OP指南中的图片

要在代码中执行此操作,您需要将以下标头添加到您的 http 客户端。假设您使用的是 vanilla System.Net.Http.HttpClient,您需要实现一个看起来像这样的类:

public class APIClient
{
    private HttpClient _client;

    public APIClient()
    {
        _client = SetupClient();
    }

    private HttpClient SetupClient()
    {
        //setup your client here
        var client = new HttpClient();

        //string oauthToken = TokenService.GetUserToken();
        string oauthToken = "eyJhbGciO......."; //Example token
        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {oauthToken}");

        //more setup here

        return client;
    }

    public async Task<HttpResponseMessage> Get(string endpoint)
    {
        var request = new HttpRequestMessage(HttpMethod.Get, endpoint);

        return await CallAsync(request);
    }

    private async Task<HttpResponseMessage> CallAsync(HttpRequestMessage request)
    {
        //do things before?

        var result = await _client.SendAsync(request);

        //handle result? null? not success code?

        return result;
    }
}

初始化时,您HttpClient应该添加以下标头:

  • AuthorizationBearer {yourtoken}

现在后续的 api 请求将获得您的 api 客户端的授权。如何设置此不记名值取决于您。有些人将凭据存储在 xamarin 主App类中,然后检索属性。其他会将数据保存到 plist 中并让 apiclient 读取此值(可能凭据每 30 天过期)。

无论如何,从 xamarin 应用程序与 api 交谈会带来许多陷阱。您应该始终从您的应用程序外部调用您的 api 开始,从 api 客户端中调用您的 api。这将教您如何正确配置请求,而无需担心您的代码/配置是否正确。


推荐阅读