swagger 如何在.NET核心中使用Microsoft身份验证提取生成的令牌?

nwsw7zdq  于 2023-06-22  发布在  .NET
关注(0)|答案(1)|浏览(143)

我正在使用Azure AD的.NET Core中实现Microsoft身份验证。我设法正确地实现了这个身份验证,并在身份验证过程完成后重定向到一个swagger端点。
问题是令牌是在重定向URL中给出的,如下所示:token in url
为了将请求发送到端点,我必须手动复制该令牌并将其附加到请求中,否则我仍然会获得未经授权的代码。
有没有什么方法可以在重定向时提取令牌并将其保存在会话中(或类似的),并将其自动包含在下一个请求中?
如果没有,我至少可以用某种方式提取令牌字符串吗?因为我没有找到任何方法来读取正在显示的URL的实际当前值,只有当发出请求时,我才能够读取地址,但那是请求,而不是实际的/swagger/access_token...等等

yrefmtwq

yrefmtwq1#

您已经正确地设置了一切,令牌是在URL中给予客户端(您的Web浏览器)是一个标准的实践。现在,客户端(Web浏览器上的网页)负责在每次请求时将该令牌发送到Web服务器。要处理这个问题,您需要客户端编码/ JavaScript
您应该:

但从问题来看,我猜你对客户机-服务器架构并不熟悉,只是玩服务器部分?在这种情况下,一种可能性(不建议)是:

  • 将重定向URL更改为您控制的API/页面之一(http://my-web-server/my-page/Index?access_token=...)
  • 在服务器中,从URL读取访问令牌并写入cookie
  1. string accessToken = null;
  2. // If the access token is passed as a URL parameter (query string)
  3. if(Request.QueryString["access_token"] != null)
  4. {
  5. accessToken = Request.QueryString["access_token"].ToString();
  6. }
  7. if (!string.IsNullOrEmpty(accessToken))
  8. {
  9. HttpCookie cookie = new HttpCookie("AccessToken", accessToken);
  10. cookie.Expires = DateTime.Now.AddMinutes(30);
  11. Response.Cookies.Add(cookie);
  12. }

这样做只是为了测试。您应该阅读客户端与服务器的概念以及相关的概念(Http请求、Http报头、Cookie、Session、JavaScript)

展开查看全部

相关问题