我有一个复杂的项目,包括一个ASP MVC网站,ASP SignalR中心和Xamarin移动应用程序(所有三个单独的项目)。由于 ASP MVC Web 引用 SignalR 中心,并且两者一起托管,因此两个项目只能有一个 OWIN 启动类(否则我会收到一个错误,指出只能有一个 OWIN 启动类)。由于我还在 Web 应用中使用 ASP 标识,因此我调用 app.UseCookieAuthentication
方法,该方法在允许我与 SignalR 中心通信之前需要一个 Cookie。因此,Xamarin 移动应用和 SignalR 中心之间的通信是不可能的。
我相信,这个问题可以用两种不同的方式回答:
- 是否可以仅在 Web 应用程序中使用 cookie 身份验证,以及不在信号中心?通过创建 2 个 OWIN 启动类,或者通过指定,哪些请求确实需要 cookie?
- 如果上述解决方案不可行/"正确",如何在 Xamarin 应用中实现 Cookie 身份验证?官方网站建议使用
response.Cookies[FormsAuthentication.FormsCookieName]
,但FormsAuthentication.FormsCookieName
在 Xamarin 中不可用。我应该如何创建饼干?然后,我是否能够在访问 SignalR 中心之前调用 Web 应用登录方法?
当然可以从 Xamarin 传递身份验证 cookie。在某种程度上,您正在进行 http 调用;HTTP 调用可以包含标头,而 cookie 只是一个专门的标头。检查您在有效的交互中遇到的 HTTP 流量,并注意应该有一个标头,其名称沿 .aspnetcookie 行,值沿行 name=reallylongstringofletters和numbers;可以创建一个 API 方法,该方法接收用户和密码并授权用户,获取从该请求发回的 Cookie,并将其包含在任何未来的请求(包括 SignalR 请求)中。我正在做同样的事情,所以如果你找不到你需要的东西,请随时寻求更多帮助。