c# - 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 表单。但我不知道如何授权客户。
解决方案
在您尝试在代码中授权之前,您应该尝试通过 api 客户端(例如Postman )与您的 API 对话。
您可以在您引用的文章的第 11 步中看到作者实际上正在这样做。
他正在执行以下步骤:
- 调用令牌端点(无身份验证)
- 将令牌添加到他的后续请求中
要使用授权调用 API,您必须首先知道 auth 方法(基本、OAuth 等)。在这种情况下,您说的是 OAuth:
要在代码中执行此操作,您需要将以下标头添加到您的 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
应该添加以下标头:
Authorization
:Bearer {yourtoken}
现在后续的 api 请求将获得您的 api 客户端的授权。如何设置此不记名值取决于您。有些人将凭据存储在 xamarin 主App
类中,然后检索属性。其他会将数据保存到 plist 中并让 apiclient 读取此值(可能凭据每 30 天过期)。
无论如何,从 xamarin 应用程序与 api 交谈会带来许多陷阱。您应该始终从您的应用程序外部调用您的 api 开始,从 api 客户端中调用您的 api。这将教您如何正确配置请求,而无需担心您的代码/配置是否正确。
推荐阅读
- sql - 在 Select LEFT 中区分 1000 和 10000 进行分组
- node.js - MongoDB 文档中已弃用的字段何时被删除?
- ruby-on-rails - Rails 6 预期文件定义常量
- javascript - 在反应材料表中添加新行时,有没有办法为单元格设置默认值?
- javascript - aurelia 是否适用于 iOS 和 Android 应用程序中的嵌套?
- vb.net - VB.net,在屏幕上显示文本的最佳方式是什么,在主窗体之外,即使窗体最小化也仍然可见?
- swift - Swift:安装任何 Xcode 项目都可用的包?
- postgresql - 在 Unix 脚本中使用 pgpl /copy 命令
- python - 如何同时运行多个发布者 paho-mqtt?
- javascript - React:如何每 x 秒重新渲染一次组件?