我们正在使用App Service身份验证来保护Web API并使用Google作为身份验证提供程序。当我们从浏览器发出请求时(当会话信息在cookie中时),它按预期工作
IIS日志:
2016-05-29T13:51:19 PID [3600]详细收到请求:GET https://XXXXXX.azurewebsites.net/api/user 2016-05-29T13:51:19 PID [3600] Verbose Found' AppServiceAuthSession'网站的cookie ' XXXXXX.azurewebsites.net&#39 ;.长度:728。2016-05-29T13:51:19 PID [3600]详细验证XXXXXX@gmail.com成功 使用'会话Cookie'认证
但是当我们使用Postman等API测试工具并使用bearer token设置 Authorization 标头时,它总是会导致重定向。
IIS日志:
2016-05-29T13:53:38 PID [3600]详细收到请求:POST https://XXXXX.azurewebsites.net/api/user 2016-05-29T13:53:38 PID [3600]信息重定向: https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=XXXXXXX-XXXXX7attpunn9smo4.apps.googleusercontent.com&redirect_uri=https%3A%2F%2FXXXXXX.azurewebsites.net%2F.auth%2Flogin%2Fgoogle%2Fcallback&scope=openid+profile+email&state=nonce%3De5f4aabe11cb4544bf18d00920940d47_20160529135838%26redir%3D%2Fapi%2Fuser
我们还尝试使用相同的承载令牌设置 X-ZUMO-AUTH 标头,我们看到错误,因为令牌不是预期的格式。显然它需要编码的JWT令牌。
IIS日志:
016-05-29T13:51:52 PID [3600]详细收到请求:POST https://XXXXXX.azurewebsites.net/api/user 2016-05-29T13:51:52 PID [3600]警告JWT验证失败:IDX10708: ' System.IdentityModel.Tokens.JwtSecurityTokenHandler'看不懂这个 字符串:'持票人 ya29.XXXXXXXXXX_RDrX_zsuvMx49e_9QS5ECz9F1yhDHe5j4H9gRN6opkjLXvN1IJZjHXa_Q&#39 ;. 字符串需要采用紧凑的JSON格式,格式如下: ' ..' .. 2016-05-29T13:51:52 PID [3600] 信息重定向: https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=XXXXXXX-k5nj6dkf987attpunn9smo4.apps.googleusercontent.com&redirect_uri=https%3A%2F%2FXXXXXX.azurewebsites.net%2F.auth%2Flogin%2Fgoogle%2Fcallback&scope=openid+profile+email&state=nonce%3De15b0915406142378XXXXX_20160529135652%26redir%3D%2Fapi%2Fuser
注意: 从Google获得的持有人令牌是有效的,因为我们可以通过拨打来验证详细信息 https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=[token]
请建议。
答案 0 :(得分:0)
您使用的Google令牌是访问令牌,而不是持票人令牌。它可用于访问Google资源,但不能用于通过Web API进行身份验证。
我无法找到关于此的良好文档,但我可以告诉你它在这里工作:
{"authorization_code":"<code>", "id_token":"<id_token>"}
。答案 1 :(得分:0)
从App Service门户打开身份验证/授权
浏览到需要身份验证的Web应用程序或API,您将被重定向到google登录页面,当您成功进行身份验证时,响应将包含:
使用以下JSON有效负载{“ redirect_uri”:“”,“ id_token”:“”}向https:// {hostname} /.auth/login/google发送请求。成功的响应将包含“ authenticationToken”,用于存储此令牌或对其进行缓存
对需要身份验证的API的后续请求应包含HTTP请求标头:
值为“ authenitcationToken”的“ x-zumo-auth”
奖金: 为了验证您的令牌,您可以使用以下JSON有效负载{“ id_token”:“”} POST到https:// {hostname} /.auth/login/google,响应中应指定令牌是否有效