我正在尝试使用 ServiceStack.Authentication.OpenId 包在 Google 上启动和运行身份验证。我遵循了 SocialBootStrap 示例,但无法弄清楚我错过了什么。
我已将身份验证提供程序添加到我的 apphost:
Plugins.Add(new AuthFeature(() => new CustomUserSession(), new IAuthProvider[] {
new CredentialsAuthProvider(), //HTML Form post of UserName/Password credentials
new TwitterAuthProvider(appSettings), //Sign-in with Twitter
new FacebookAuthProvider(appSettings), //Sign-in with Facebook
new GoogleOpenIdOAuthProvider(appSettings), //Sign-in with Goolge OpenId
new WsFedSamlAuthProvider(appSettings)
})
我已将配置设置添加到我的 app.config(我正在运行自托管应用程序):
<add key="oauth.googleopenid.AppId" value="XXX" />
<add key="oauth.googleopenid.AppSecret" value="XXX" />
<add key="oauth.googleopenid.RedirectUrl" value="http://XXX" />
<add key="oauth.googleopenid.CallbackUrl" value="http://XXX/api/auth/googleopenid" />
顺便说一句,AppId 和 AppSecret 不在示例中,但是没有它们我得到了一个不同的错误。
最后,我在登录页面上放置了一个 Web 表单:
<form action="/api/auth/googleopenid" method="POST">
<button class='btn' type='submit'>Sign-in with Google</button>
</form>
当我单击按钮时,出现以下错误:
errorCode: InvalidOperation
Exceptionmessage: No current HttpContext was detected, so an IOpenIdApplicationStore instance must be explicitly provided or specified in the .config file. Call the constructor overload that takes an IOpenIdApplicationStore.stack
Trace[Auth: 08/01/13 20:49:30]: [REQUEST: {provider:googleopenid}]System.InvalidOperationException: No current HttpContext was detected, so an IOpenIdApplicationStore instance must be explicitly provided or specified in the .config file. Call the constructor overload that takes an IOpenIdApplicationStore. at DotNetOpenAuth.Messaging.ErrorUtilities.VerifyOperation(Boolean condition, String errorMessage, Object[] args) at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.get_HttpApplicationStore() at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty..ctor() at ServiceStack.Authentication.OpenId.OpenIdOAuthProvider.Authenticate(IServiceBase authService, IAuthSession session, Auth request) at ServiceStack.ServiceInterface.Auth.AuthService.Authenticate(Auth request, String provider, IAuthSession session, IAuthProvider oAuthConfig) at ServiceStack.ServiceInterface.Auth.AuthService.Post(Auth request) at lambda_method(Closure , Object , Object ) at ServiceStack.ServiceHost.ServiceRunner`1.Execute(IRequestContext requestContext, Object instance, TRequest request)
我已经尽可能地遵循了这些例子,我想我错过了什么?
谢谢你的期待。