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

什么是 AuthorizeEndpointPath?

阴飞星
2023-03-14

我正在使用OWIN中间件构建一个ASP.NET web API SPA,需要解释一下oauthauthorizationserverprotations中AuthorizeEndpointPath属性的作用。

文件表明

客户端应用程序将重定向用户代理以获得用户同意颁发令牌的请求路径。必须以斜杠开头,如“/Authorize”。

当我尝试在没有Bearer令牌的情况下访问受保护的WebApi时,我的应用程序从未重定向到指定的路径(正如我所期望的那样),而是返回401。

共有2个答案

山乐生
2023-03-14
匿名用户

我最终在这里寻找相同的答案。由于我没有找到任何内容,我开始使用反编译器进行挖掘。

原来< code > OAuthAuthorizationServerMiddleware 正在使用< code>TokenEndpointPath或< code > AuthorizeEndpointPath 来匹配当前的请求URI,并查看它是否是一次身份验证尝试。如果与< code > AuthorizeEndpointPath 匹配,它将使用< code>this中的参数创建一个新的< code > AuthorizeEndpointRequest 。Request.Query应该包括像< code>client_id和< code>redirect_uri这样的值。

所以我的猜测是,对AuthorizeEndpointPath的请求应该如下所示

/api/Account/ExternalLogin?client_id=<your_server_id>&redirect_uri=<absolute_path_to_external_authorizathtml" target="_blank">ion_endpoint>

并且很明显会使用第三方服务器进行身份验证。

同样,这是我可以从源代码中弄清楚的。

欧阳晗日
2023-03-14

不同的endpoint路径用于不同的OAuth流以进行令牌授予。

    < Li > < code > TokenEndpointPath =用于在客户端凭据授予流程、资源所有者密码凭据授予流程中以及在授权代码授予流程结束时获取令牌 < Li > < code > AuthorizeEndpointPath =用于授权代码授权流和隐式授权流中的委托授权

调用这两个endpoint中的任何一个都会导致在< code > oauthorizationserverprovider 的实现中执行各种方法,具体执行哪种方法取决于您调用的endpoint以及随请求发送的参数。您必须从客户端显式地调用其中一个——您永远不会被重定向到其中任何一个。

在进一步讨论流和endpoint之前,让我们首先定义三件事:

  • 授权服务器:我们正在调用以授权客户端或用户的东西。在您的例子中-您正在为OAuth配置的WebApi Web服务。这通常也是实际提供资源的同一件事,但是资源服务器和授权服务器可以分开。
  • 客户端:代表自己或代表用户向授权服务器发出请求的东西。可能是移动应用程序、SPA、Web应用程序,或者只是另一个没有实际用户的应用程序。
  • 用户:某些客户端应用程序的用户

我们让客户端直接认证——我们不要求用户在任何地方输入用户名和密码。这可能是因为客户端没有用户,或者我们在调用web服务时不关心用户是谁。

请求示例:

POST https://yourwebapi.com/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: yourwebapi.com

grant_type=client_credentials&
client_id=mega_app&
client_secret=1234hsdflkjh123

将调用GrantClientCr

这是当用户将他们的详细信息直接输入客户端时,客户端将这些详细信息直接发送到授权服务器。所以客户端看到用户的凭据。

你可以在你的客户端中调用它,请求如下:

POST https://yourwebapi.com/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: yourwebapi.com

grant_type=password&
username=bart&
password=b4rt

客户端使用grant_type密码向您在 TokenEndpointPath 中指定的终结点发出请求,这将导致在 OAuthAuthorizationServerProvider 的实现中调用 GrantResourceOwnerCredentials 方法。

假设用户凭据有效,授予访问权限,创建一个标识,该标识将具有特定于该用户的一些声明,并返回一个令牌,客户端随后可以将其发送到授权服务器,以便在以后的请求中再次拉出此标识。

对于授权代码授权流和隐式授权流,我们感兴趣的是用户是谁,但我们不希望用户直接向客户端输入凭据。在这种情况下,客户端调用授权服务器,授权服务器代表客户端以某种方式让用户进行身份验证。在这种情况下,客户端必须通过它的客户端id和一个redirect_url以及其他一些位进行发送。

  GET  HTTP/1.1
  Host: https://yourwebapi.com/api/Account/ExternalLogin?
  client_id=mega_app&
  scope=user+repo&
  state=1234kjhsfdlkh123497&
  response_type=code&
  redirect_uri=https%3a%2f%2fyourwebapi.com%2fcallme

response_type参数决定我们使用的是隐式代码流还是授权代码流。在此基础上,我们可以返回令牌或代码。如果我们返回代码,那么客户端必须调用TokenEndpoint Path,并使用该代码获得令牌。

查看此MSDN页面以获取更多信息,以及使用ASP.NET.设计可进化Web API的第16章

 类似资料:
  • 问题内容: 什么是selenium? 当您打开Selenium的官方页面时,您首先读到的是“什么是Selenium?”中的“ Selenium automates browser”。部分。“selenium的哪个部分适合我?”部分 下面提供了Selenium WebDriver和Selenium IDE之间的选择。由此,我推断出Selenium是一组工具,并且该集合包括IDE,WebDriver

  • 硒是什么? 当你打开Selenium的官方页面,首先看到的是“什么是Selenium”中的“Selenium自动浏览器”。节。“硒的哪一部分对我合适?”下面提供了Selenium WebDriver和Selenium IDE之间的选择。由此,我推断Selenium是一个工具集合,该集合包括IDE、WebDriver API(语言绑定)、网格、Selenium独立服务器、浏览器驱动程序。一个人必须下

  • 本文向大家介绍什么是事务?什么是锁?相关面试题,主要包含被问及什么是事务?什么是锁?时的应答技巧和注意事项,需要的朋友参考一下 答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔

  • 我在这里读到 写入共享引用类型<代码> 理解<代码> 在另一个地方,我阅读了以下代码: 结构人中的a是什么 名称的含义是什么: 如果想避免使用

  • 我几天前听说了Docker的事,想过去看看。 但事实上,我不知道这个“容器”的用途是什么? 什么是容器? 它能取代一个专门用于开发的虚拟机吗? 简单地说,在公司中使用Docker的目的是什么?主要的优势?

  • 本文向大家介绍什么是batch normalization,原理是什么?相关面试题,主要包含被问及什么是batch normalization,原理是什么?时的应答技巧和注意事项,需要的朋友参考一下 Batch Normalization就是在训练过程,每一层输入加一个标准化处理。 深度神经网络之所以复杂有一个原因就是由于在训练的过程中上一层参数的更新使得每一层的输入一直在改变。所以有个办法就是去