C# 邮递员省略原始Oauth2身份验证握手代码

C# 邮递员省略原始Oauth2身份验证握手代码,c#,oauth-2.0,postman,C#,Oauth 2.0,Postman,我有一个由合作伙伴/客户机发送的邮递员请求,该请求要求Oauth2访问其web服务端点。以下是授权部分: 我需要在C#中重新创建此请求。应该很简单,只需单击code链接,然后在C#-RestSharp中获取示例代码。两个问题: 1-当我在Postman中执行此操作时,我发现SAML2令牌无效,因为它的有效期已经结束。因此,我单击了获取新访问令牌按钮,我收到了凭证的挑战: (有了客户ID和客户机密,我难道不能绕过这个挑战吗?) 2-最终我需要能够在我的c#应用程序中运行此请求。当我点击Post

我有一个由合作伙伴/客户机发送的邮递员请求,该请求要求Oauth2访问其web服务端点。以下是授权部分:

我需要在C#中重新创建此请求。应该很简单,只需单击
code
链接,然后在
C#-RestSharp
中获取示例代码。两个问题:

1-当我在Postman中执行此操作时,我发现SAML2令牌无效,因为它的有效期已经结束。因此,我单击了
获取新访问令牌
按钮,我收到了凭证的挑战:

(有了
客户ID
客户机密
,我难道不能绕过这个挑战吗?)

2-最终我需要能够在我的c#应用程序中运行此请求。当我点击Postman中的
code
链接时,它给出了一个很好的C#示例,但是Postman生成的示例代码的问题是,它假设已经获得了
承载令牌
,只需将其插入源示例。但是获得无记名代币是邮递员忽略的一个非常重要的部分。以下是我的具体示例,摘自《邮递员》:

var client = new RestClient("https://myurl-here:7148/foo/ODataV4/WS3_stuff?Company='abc123'");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer ey...massive-string...Zb");
request.AddHeader("Cookie", "ApplicationGatewayAffinity=ab721.more.d6c1a341bc; ApplicationGatewayAffinityCORS=ab..more...bc");
request.AddParameter("application/json", "{a-bunch-of-json-here}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

我遗漏了什么?我怎样才能得到邮递员为获得持票人和那些
Cookie
值所做的一切的C#等价物?我认为有一种方法可以让应用程序实现所有Oauth握手,而无需像上面的屏幕截图那样将用户发送到MS窗口-但是如何实现呢?

ClientID和ClientSecret用于识别您的应用程序而不是用户。它们被发送到授权服务器,以便服务器知道它可以向该应用程序颁发访问令牌。用户身份验证是另一回事。为了获得允许访问该用户数据的访问令牌,您必须始终对该用户进行身份验证

除非您只需要验证应用程序并希望访问不属于任何用户的数据。在这种情况下,您需要一个客户端凭据流,一个OAuth流,它允许您的应用程序获取访问令牌

Postman是一个调用API的工具,它只生成允许您进行API调用的代码。看看一些C#OAuth客户机(如果您使用的是框架的话,也可能是框架的)。这些客户端将使您能够轻松地生成新的访问令牌。不过,如果您需要用户的访问令牌,请记住您需要用户打开浏览器。如果您正在开发一个后端应用程序,它不提供任何页面,那么您可以查看OAuth设备流,它使您能够在不同于应用程序运行的设备上对用户进行身份验证


至于饼干,确保你是否真的需要它们。如果您正在调用API,则可能不需要这些Cookie来发出请求。

删除Cookie,然后与邮递员一起重新捕获以了解Cookie是如何获得的。这没有起到任何作用。我删除了postman windows应用程序中的cookies并重新运行了请求。结果和以前一样。在左下角的第一个窗口中有一个按钮“添加授权数据”。这可能是关键。你可能想查看这篇文章,被接受的答案应该会告诉你你想要什么来获得C#中的持票人代币:谢谢你Michal提供的详细和周到的回答。