使用 Asp.Net 下的 owin 和 LinkedIn 身份验证提供程序进行 WebApi 身份验证

Posted

技术标签:

【中文标题】使用 Asp.Net 下的 owin 和 LinkedIn 身份验证提供程序进行 WebApi 身份验证【英文标题】:WebApi authentication with owin and LinkedIn auth provider under Asp.Net 【发布时间】:2018-12-20 13:31:06 【问题描述】:

我们有一个在 Asp.Net 下使用 Owin (.Net Framework 4.6) 运行的 webApi。 几个本机前端客户端(iosandroid 等)正在使用该 api。 该 API 当前使用 Microsoft Login 和不记名令牌和 cookie 身份验证。这有效,访问令牌通过重定向请求直接返回到客户端中的 webView,我们能够使用 Bearer 令牌和另一个身份验证 cookie 访问我们的 API。 我们现在的任务是在该 API 中使用 LinkedIn 身份验证提供程序实现身份验证。澄清一下:我们需要一个 OWIN 实现(没有 AspNet.Core)。

我们可以使用LinkedIn auth provider 在 webAPI 中从 LinkedIn 获取访问令牌。所以我们在 User.Identity.Claims 中看到了令牌。我们也可以再次将其退还给客户。是的,这可能不是一个好主意,但似乎不可能直接在浏览器/webView 中获取令牌,因为 response_type=code 对于linkedIn 身份验证是必需的。使用 response_type=token 这适用于 microsoft 身份验证。

尽管我们已经检索到了 access_token,但最终 webview 还是被重定向到了以下 url: http://10.0.2.2:8108/signin-linkedin?error=unsupported_response_type

请忽略我们暂时不使用 https。宿主仅用于测试,但重要的部分是附加错误。

为什么会出现此错误?谁调用了这个请求,为什么我们已经有了令牌,但为什么会出现这个错误?

另一个信息是,我们现在在客户端中拥有的访问令牌不能用于针对 webAPI 的身份验证。所以我们会返回一个 401 Unauthorized。

也许我应该明确提到我们在 api 中也使用了 cookie 身份验证,这似乎可以工作,因为我们在 webView 中接收 cookie,并且我们只能在正确的用户上下文中调用受 cookie 身份验证保护的方法。

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

使用 HTTPS 后 unsupported_response_type 错误消失。

【讨论】:

以上是关于使用 Asp.Net 下的 owin 和 LinkedIn 身份验证提供程序进行 WebApi 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 OWIN 在 ASP.NET MVC 5 应用程序中存储和检索 facebook 访问令牌

ASP.NET (OWIN) Identity:如何从 Web API 控制器获取 UserID?

没有 OWIN 和 AspNet.Identity 的基于 Asp.Net Web Api 令牌的授权

在弹出窗口中使用 Owin 外部登录的 Asp.net 登录提供程序

Owin管道与asp.net管道模型

具有混合身份验证 JWT 和 SAML 的 ASP.NET Web API 2.2 OWIN