处理 OAuth 2.0 身份验证 - 在 ASP.NET MVC 应用程序中获取令牌重定向令牌响应

Handle OAuth 2.0 Authentication - Get token redirect token response in ASP.NET MVC application

我最近开始摆弄 OneDrive API,它使用 OAuth 2.0 身份验证/授权流程。

OneDrive API OAuth 2.0

我正在尝试按照 Token Flow 使用 ASP.NET MVC 应用程序获取访问令牌。

我提出的请求类似于以下内容:

GET https://login.live.com/oauth20_authorize.srf?client_id={client_id}&scope={scope}&response_type=token&redirect_uri={redirect_uri}

在用户成功授权后,Web 浏览器将被重定向到您的重定向 URL,并在 URL.[=18 中添加了附加参数 =]

重定向 URL 类似于以下内容: https://login.live.com/oauth20_authorize.srf#access_token={access_token}&authentication_token={authentication_token}&token_type=bearer&expires_in=3600&scope=onedrive.info%20onedrive.full&user_id={user_id}

注意上面格式URL中的#。这是根据 OAuth 2.0 协议标准的规范。

问题: 如果我在我的 MVC 应用程序中有一个重定向 URL 来处理,它的查询参数部分以 ? 开头,那么它可以被处理非常容易地使用控制器的操作和适当的输入参数映射查询字符串键/值。

我如何处理我的 MVC 应用程序中的 URL,它的查询字符串部分以 # 开头,并从中获取所有查询字符串键/值?

旁注: 在这种情况下,我要求不要建议使用任何第三方 API / 库 / 例程。考虑到我希望以简单明了的方式执行 OAuth 流程。谢谢

您选择的方法是令牌流,也称为隐式授权流,有意使用了#(片段)。这是出于安全目的,以避免中间人攻击。此 link 中的答案提供了有关主题 OAuth2.0 Implicit Grant flow. Why use url hash fragments?

的一些描述

但是,如果您仍想使用令牌流,则可以使用 window.location.hash 在 JavaScript 中读取客户端的值,然后可能使用 Ajax 处理这些值提交到服务器。

我建议您使用适用于您在问题中解释的场景的代码流。代码流在同一 link https://github.com/OneDrive/onedrive-api-docs/blob/master/auth/msa_oauth.md#code-flow

上可用

顺便说一句,上面的link里面也有一个#(片段):)