使用YammerAuthProvider进行服务堆栈身份验证会导致404错误

时间:2016-03-05 19:11:29

标签: c# authentication oauth servicestack

我对这个问题感到非常难过。我真的非常希望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上工作...... :(

1 个答案:

答案 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