我对这个问题感到非常难过。我真的非常希望ServiceStack的YammerAuthProvider`能够工作,但它只是不同意我。
我使用OAuth(最初是Twitter,我为Yammer修改)身份验证的示例如下:
public override void Configure(Container container)
{
var appSettings = new AppSettings();
container.Register(InfusionBootstrapper.Instance.Container.Resolve<MdsRepository>());
JsConfig.DateHandler = DateHandler.ISO8601;
Plugins.Add(new SwaggerFeature());
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[]
{
new YammerAuthProvider(appSettings)
{
RedirectUrl = "http://192.168.1.154:2223",
CallbackUrl = "http://192.168.1.154:2223/auth/yammer",
ClientId = "rwKNTVw2idIza5XShMiQw",
ClientSecret = "9e9X1kpJx96mA44nsBY6flCfsnyN7fgE7s9bmQVo",
}
}));
//Plugins.Add(new RegistrationFeature());
container.Register<ICacheClient>(new MemoryCacheClient());
var userRep = new InMemoryAuthRepository();
container.Register<IUserAuthRepository>(userRep);
SetConfig(new HostConfig
{
DefaultContentType = MimeTypes.Json,
DefaultRedirectPath = "/swagger-ui"
});
}
但是当我在浏览器上测试服务器时,我最终得到了这个令人讨厌的错误:
未找到请求处理程序(404):
Request.HttpMethod:GET Request.PathInfo:/ login
的Request.QueryString: 重定向= HTTP%3A%2F%2f192.168.1.154%3a2223%2fquote%2fMS
Request.RawUrl: /login?redirect=http%3a%2f%2f192.168.1.154%3a2223%2fquote%2fMS
我做错了什么,或者我在这里错过了什么? YammerAuthProvider
只是简单的错误并且不起作用吗?
Yammer提供的基本OAuth示例不到一段代码,所以我不明白如此简单的事情很难在ServiceStack上工作...... :(
答案 0 :(得分:1)
按惯例,AuthFeature
具有默认HtmlRedirect="~/login"
,如果HTML用户代理(例如浏览器)尝试访问受保护资源,则会将其重定向到该位置。
此重定向与YammerAuthProvider
无关,它只是AuthFeature
告诉用户它尝试访问的资源需要身份验证并将其重定向到{{1的预期位置页面,以便他们可以进行身份验证。
您可以创建包含Web App登录名的/login
页面(和register RazorFormat),也可以在注册/login.cshtml
时更改AuthFeature应重定向到的登录页面插件,例如:
AuthFeature
您可以通过设置Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[]
{
new YammerAuthProvider(appSettings)
{
RedirectUrl = "http://192.168.1.154:2223",
CallbackUrl = "http://192.168.1.154:2223/auth/yammer",
ClientId = "rwKNTVw2idIza5XShMiQw",
ClientSecret = "9e9X1kpJx96mA44nsBY6flCfsnyN7fgE7s9bmQVo",
}
}){ HtmlRedirect = "~/mylogin" });
来避免重定向,在这种情况下,服务器只返回HtmlRedirect=null
。