【问题标题】:consuming .net core api by xamarin form application通过 xamarin 表单应用程序使用 .net core api
【发布时间】:2021-12-30 16:54:31
【问题描述】:

我目前正在开发一个使用来自 .net 核心 API 的数据的 Xamarin 表单。
对于 API 方面,我使用 Abp framework
通过使用这个reference,我可以使用来自 API 的数据。
但在本例中,用户需要使用管理员凭据登录。
我需要做的是,我只需要在不登录的情况下使用 API 中的数据。
如果我在需要访问的 API 方法上添加 [AllowAnonymous] attribute 是否正确?

这是他们展示的例子,

var accessToken = await _loginService.AuthenticateAsync();
var httpClient = GetHttpClient(accessToken);

有没有像只使用clientId/secrets而不使用accessToken的例子?

【问题讨论】:

  • 来自您发布的链接:“AllowAnonymous 禁止身份验证。因此,包括未经授权的用户在内的所有人都可以使用 GetAsync 方法。”。这听起来正是你想要的。你试过了吗?
  • @Jason,是的,我已经尝试过了,没关系。我想知道的是 API 安全性。假设我想从手机上使用这个方法,我还需要配置客户端 ID 和机密吗? clientId/secrets 代表什么?
  • 好吧,很明显,如果您禁用身份验证,那么正如文档所说,API“对所有人都可用,包括未经授权的用户”。我在文档中没有看到任何提及 clientid/secrets 的内容。
  • 阅读 ABP 文档,听起来像是基于 asp.net 核心认证。为了您的目标,我认为您首先在您的服务器上手动创建一个用户和密码,您的应用程序将使用该用户和密码来发出请求。您发送该用户+密码,就好像该用户正在登录一样。Here is an ASP.NET Core tutorial 使用此技术 - 请参阅请求正文中提到的 json 用户名密码。我不知道你是如何适应 ABP 的。

标签: api security .net-core xamarin.forms abp


【解决方案1】:

我需要做的是,我只需要在不登录的情况下从 API 消费数据。

这是指服务器到服务器身份验证;后端向其他后端发出请求,无需用户交互。

您要查找的身份验证流程名为Client Credentials Flow

归结为:

  • 在身份验证服务器上将您的 api(abp 应用)添加为 api 资源api 范围
  • 将您的 ui 应用(xamarin 应用)添加为身份验证服务器上的客户端
  • 在身份验证服务器上为您的 xamarin 应用声明一个客户端密码
  • 使用您在上面创建的 api 范围客户端密码从 xamarin 应用程序向 身份验证服务器发出 access_token 请求。

它的实现可以在身份验证服务器提供商(即您的_loginService)上有所不同。可以是 Identityserver4、Microsoft、Google 等。

如果您使用 ABP 应用程序后端(作为身份验证服务器),它会在后台处理大部分自动化内容。您可以查看abp synchronous communication between microservices docs,其中解释了如何在微服务之间使用客户端凭据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2021-12-04
    相关资源
    最近更新 更多