Servicestack Windows 通用社交身份验证
Servicestack Windows Universal Social Authentication
我正在尝试从 windows 通用 8.1 应用程序中的 c# 客户端实现社交身份验证。例如,当我 post 到身份验证提供程序 .../googleoauth 时,客户端失败。 Fiddler 显示 302 重定向,因此反序列化在响应中失败。如果我使用浏览器,身份验证流程会起作用,所以我认为一切都配置正确,但当然可能会遗漏一些东西。如果有人有任何见解或使用来自 c# 客户端的社交身份验证提供程序的示例,将不胜感激。
伊恩
OAuth 流程需要浏览器才能工作,以便将用户重定向到他们可以批准访问的远程 OAuth 网站。因此,您需要在 WebView 中启动 url,然后在用户批准您的申请并重定向回您的网站后捕获 Session cookies。
TechStacks Auth 示例使用 Xamarin.Android 的 Xamarin.Auth 组件演示了此策略。
以防其他人在 UWP 中寻找示例。这似乎对我有用。大多数情况下,CreateCookieContainer 方法只是循环遍历 cookie 并将它们添加到返回的新容器中。再次感谢@mythz 在 ServiceStack
中所做的出色工作和支持
// Grab auth cookies from callback uri
var cookies = _httpFilter.CookieManager.GetCookies(uri);
var authCookies = cookies.AsEnumerable().Where(x => new[] {"ss-id", "ss-pid", "ss-opt"}.Contains(x.Name))
.Select(x => new Cookie(x.Name, x.Value, x.Path, x.Domain)).ToArray();
string sessionId = null;
var cookieJar = CreateCookieContainer(authCookies, uri, ref sessionId);
// Store the tokens for autologin
await DataServiceFactory.Instance.StoreSingletonSetAsync(authCookies);
// Set auth on the current client
_serviceClient.CookieContainer = cookieJar;
_serviceClient.SessionId = sessionId;
我正在尝试从 windows 通用 8.1 应用程序中的 c# 客户端实现社交身份验证。例如,当我 post 到身份验证提供程序 .../googleoauth 时,客户端失败。 Fiddler 显示 302 重定向,因此反序列化在响应中失败。如果我使用浏览器,身份验证流程会起作用,所以我认为一切都配置正确,但当然可能会遗漏一些东西。如果有人有任何见解或使用来自 c# 客户端的社交身份验证提供程序的示例,将不胜感激。 伊恩
OAuth 流程需要浏览器才能工作,以便将用户重定向到他们可以批准访问的远程 OAuth 网站。因此,您需要在 WebView 中启动 url,然后在用户批准您的申请并重定向回您的网站后捕获 Session cookies。
TechStacks Auth 示例使用 Xamarin.Android 的 Xamarin.Auth 组件演示了此策略。
以防其他人在 UWP 中寻找示例。这似乎对我有用。大多数情况下,CreateCookieContainer 方法只是循环遍历 cookie 并将它们添加到返回的新容器中。再次感谢@mythz 在 ServiceStack
中所做的出色工作和支持 // Grab auth cookies from callback uri
var cookies = _httpFilter.CookieManager.GetCookies(uri);
var authCookies = cookies.AsEnumerable().Where(x => new[] {"ss-id", "ss-pid", "ss-opt"}.Contains(x.Name))
.Select(x => new Cookie(x.Name, x.Value, x.Path, x.Domain)).ToArray();
string sessionId = null;
var cookieJar = CreateCookieContainer(authCookies, uri, ref sessionId);
// Store the tokens for autologin
await DataServiceFactory.Instance.StoreSingletonSetAsync(authCookies);
// Set auth on the current client
_serviceClient.CookieContainer = cookieJar;
_serviceClient.SessionId = sessionId;