如何使用Owin安全性针对WebAPI的自动化测试进行身份验证?

时间:2015-11-24 00:51:08

标签: authentication asp.net-web-api owin google-authentication

我有一个带有owin安全性的.net web api应用程序。安全中间件配置了Google身份验证(无本地用户名/密码身份验证)和Oauth持有者令牌。

在启动时:

public void ConfigureAuth(IAppBuilder app)
{
   ...
   app.UseOAuthBearerTokens(new OAuthAuthnorizationServerOptions {
      TokenEndpointPath = new PathString("/token"),
      AuthorizeEndpointPath = new PathString("/account/authorize"),
      Provider = new ApplicationOAuthProvider("web"),
      ...
   });

   app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions {
      ClientID = "...",
      ClientSecret = "..."
   });
}

从我的客户端应用程序中,我转到

http://myapp.com/account/authorize?client_id=web&response_type=token&redirect_uri=...

这会重定向到用户填写的Google登录信息,然后使用我剥离的不记名令牌返回我的应用,并添加到我的api的请求标头中。

我想编写一些集成测试,我的测试会调用API。测试具有测试用户的Google凭据,但我不确定如何在不启动浏览器和谷歌登录屏幕的情况下进行测试验证。我可以用Selenium开车,但这看起来很严厉。

如何以编程方式获取与我的API一起使用的持票人令牌,以便我可以冒充我的测试用户?

1 个答案:

答案 0 :(得分:1)

通常情况下,您会在这种情况下使用OAuth2 resource owner password credentials授权,但Google does not seem to support that

因此,您最好的选择似乎是使用authorization code授权来验证测试用户,从令牌端点响应中提取刷新令牌。然后使用刷新令牌和客户端ID和密码从集成测试中获取访问令牌。

有关详细信息,请参阅此处: https://developers.google.com/identity/protocols/OAuth2InstalledApp