当前位置: 首页 > 知识库问答 >
问题:

如何生成承载令牌来调用远程Web API

西门奇希
2023-03-14

我有两个站点,一个用户登录并管理他们的帐户的站点和一个没有UI的站点,只不过是一个存储和检索内容的API。这两个站点都使用相同的Owin ASP. Net Idreal 2.0设置。UI站点使用cookie的原因很明显,API站点使用承载令牌。我需要能够使用当前用户身份验证从UI站点调用API方法/url。简而言之,我需要在UI站点中生成一个有效的承载令牌,以便在进行Rest API调用时添加到HTTP标头中。

我正在寻找某种方法来使用“受信任的”客户端身份验证,并为API调用/令牌url来生成承载令牌,或者因为两个站点共享相同的代码,并且用户表调用Owin方法来在UI站点代码中生成承载令牌,我可以将其传递到API头,API站点将其视为有效令牌。

如果你需要更多信息,请告诉我。

更新:请参阅下面更新的答案,以及使用oAuth隐式流执行此操作的正确方法。

共有1个答案

有玄天
2023-03-14

我最终找到了本文,并按照其样例代码创建了我们自己的OAuth授权服务器。有了它,我们可以使用我们的UI站点和OAuth服务器之间共享的可信客户端id和机密,代表用户请求用户令牌。

http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

更新1:在对功能和事物进行了更多的研究之后,我偶然发现了是什么创建了令牌。Owin中有一个TicketDataFormat类,它发挥了所有的神奇作用。它接受构造函数中的一个参数,即IDataProtector。如果Owin资源服务器在其中间件选项中使用默认的AccessTokenFormat(TicketDataFormat);与默认的DataProtector一起,您可以在客户端复制令牌生成。顺便说一句,默认的DataProtector使用MachineKey,因此您的两个受信任站点必须在web中设置相同的MachineKey。配置。所有不受信任或部分受信任的站点都应使用上述链接中提到的标准oAuth流。

var protector = app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, "Access_Token", "v1");
var tdf = new TicketDataFormat(protector);
var ticket = new AuthenticationTicket(){ ... };
var accessToken = tdf.Protect(ticket);

更新2:建议使用oAuth来实现这一点,实际上唯一的方法是在客户端使用隐式流,并设置正确的作用域和响应类型。

IdentityServer3文档有非常完善的教程,让我们在很短的时间内启动并运行。特别是在入门:MVC身份验证中代表用户部分调用API

 类似资料:
  • 我可以使用类似的代码和承载令牌进行GET,但似乎无法完成POST。 当我将Json、URL和承载令牌复制/粘贴到Postman中时,效果非常好。但从C#执行此操作时,会出现以下错误: “状态代码:400,原因短语:'错误请求',版本:1.1,内容:System.Net.Http.StreamContent,标题:{传输编码:分块连接:保持活动预期CT:最大年龄=604800,报告uri=”http

  • 我正在尝试调用我已被指示的API: 这需要一个授权头:承载访问令牌。 我有承载访问令牌,并尝试通过邮递员,并通过C#使用WebRequest,没有任何效果。 在Postman中,我将方法设置为GET,将授权设置为No Auth,在Headers选项卡上,我尝试添加一个标题,如下所示: 标头:“授权” 值:“我的令牌” 我也尝试过 标题:“Bearer”值:“mytoken” 也 标头:“授权” 值

  • 我想调用PowerBIRESTAPI调用从本地/特定存储库上载pbix文件。 > 我应该如何生成承载令牌以供邮递员授权? 这个rest api调用是否可以用于generateToken? 此rest调用需要传递什么作为授权令牌? myorg是PowerBI帐户名称吗?从哪里可以获取myorg值? 下面是我想通过邮递员调用的几个电话: 也很少打电话。 生成令牌的快速解决方案是什么?

  • 我目前正在使用Postman来生成承载令牌,我正在自动化测试中使用它。现在,我也想使用Java中的REST Assured来自动化承载令牌生成过程。请帮帮我.谢了。

  • 我在调用rest api时尝试使用承载令牌时遇到一些问题。 我尝试了两种方法,结果相同: 我在azure门户中创建了一个应用注册,并授予它使用devops api进行用户模拟的权限。 我在中创建了一个应用程序https://app.vsaex.visualstudio.com/并授予it项目/团队管理权限。 对于我的代码,我使用了这个(当我使用PAT进行身份验证时有效) 我使用以下示例获取令牌:h