处理 OAuth 2.0 身份验证 - 在 ASP.NET MVC 应用程序中获取令牌重定向令牌响应
Posted
技术标签:
【中文标题】处理 OAuth 2.0 身份验证 - 在 ASP.NET MVC 应用程序中获取令牌重定向令牌响应【英文标题】:Handle OAuth 2.0 Authentication - Get token redirect token response in ASP.NET MVC application 【发布时间】:2015-05-05 15:56:46 【问题描述】:我最近开始摆弄使用 OAuth 2.0 身份验证/授权流程的 OneDrive API。
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 的附加参数。
重定向 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 过程。谢谢
【问题讨论】:
【参考方案1】:您选择的方法是令牌流,也称为隐式授权流,故意使用#(片段)。这是出于安全目的,以避免中间人攻击。此链接中的答案提供了有关主题OAuth2.0 Implicit Grant flow. Why use url hash fragments?的一些描述
但是,如果您仍想使用令牌流,您可以使用 window.location.hash 在 javascript 中读取客户端的值,然后通过可能的 Ajax 提交到服务器来处理这些值。
我建议您使用适用于您在问题中解释的场景的代码流。代码流可在同一链接上找到https://github.com/OneDrive/onedrive-api-docs/blob/master/auth/msa_oauth.md#code-flow
顺便说一句,上面的链接也有一个#(片段):)
【讨论】:
这对我来说非常有意义。我怀疑这一点,但我现在确定了。另外,我了解了 Token flow 更广为人知的关键字“Implicit Grant Flow”,它可以帮助我阅读更多关于该方向的信息以及它的用途。感谢@Praveen 的参考。添加一个来完成它:***.com/questions/7522831/…以上是关于处理 OAuth 2.0 身份验证 - 在 ASP.NET MVC 应用程序中获取令牌重定向令牌响应的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JMeter 中进行 OAuth 2.0 身份验证?