我正在开发C#Web Api(.NET Framework),并希望并行使用AAD身份验证(已经正常工作)和Google身份验证。这意味着,我的客户(JavaScript或仅Postman)应该获取令牌,将其包含在Authorization标头(Bearer令牌)中,并能够执行API方法。
但是,我用Postman生成的令牌似乎没有被我的C#Web Api接受。我总是收到HTTP401。AAD(Windows Azure Active Directory)可以无缝运行。
使用C#Web Api(.Net Framework 4.6.1),包括Microsoft.Owin.Security.Google Nuget软件包4.0.1。
我已经在Google开发人员控制台上创建了Oauth客户端,获取了我的客户端ID和客户端密码。另外,我还在此处设置了重定向URI。
我正在使用Postman Oauth2授权,设置以下参数:
然后,我可以使用我的Google帐户登录,同意使用范围,并获得这样的令牌:
访问令牌 ya29.Gls7 ....
此令牌然后作为授权标头发送,例如“ Bearer ya29.Gls7 ....”
Startup.Auth
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
});
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = ConfigurationManager.AppSettings["GoogleClientId"],
ClientSecret = ConfigurationManager.AppSettings["GoogleClientSecret"],
});
}
ValuesController
public class ValuesController : ApiController
{
[Authorize]
// GET api/values/5
public string Get(int id)
{
return "value";
}
}
每次使用Postman调用API时,即使在请求授权标头中包含了承载令牌,也会得到401。
HTTP GET https://localhost:44385/api/values/1
编辑:我这边没有可用来验证令牌的自定义代码。我认为这是由图书馆自动完成的。实际上,这对于AAD令牌是自动完成的,但对于Google Oauth则不会。
我希望深入了解控制器方法的代码,并至少使用Google帐户名称/电子邮件设置身份名称。
我想在我的控制器方法中使用Google帐户进行身份验证的地方是什么?