asp.net mvc 中的 Google 身份验证 - 无法获取用于 Google 登录的 redirectUrl
Posted
技术标签:
【中文标题】asp.net mvc 中的 Google 身份验证 - 无法获取用于 Google 登录的 redirectUrl【英文标题】:Google Authentication in asp.net mvc - Unable to fetch redirectUrl for Google login 【发布时间】:2017-07-08 15:29:18 【问题描述】:我在互联网上发现很少有通过 web api 完成谷歌身份验证的资源。
所以,我想以类似的方式在 asp.net mvc web 应用程序中尝试相同的方法。我被困在如何为我的应用程序获取 redirectUri 的中间。
1.App在google注册,clientid和secret在Authconfig.cs中提到。
2.点击我的按钮后,我必须重定向到 GoogleSignIn 页面。将用户带到登录页面的 redirectUrl(authrequestUrl) 是我没有得到的。
在Web api中,在url下方请求(GET请求)将返回redirectUrl作为响应。http://localhost:xxxx/api/Account/ExternalLogin?returnUrl=%2f&generateState=true
在我的登录视图中单击我的登录按钮后,我可以将用户重定向到谷歌登录页面。
MyLogin.cshtml
<body>
<row>
<button id="GoogleBtn" type="button" class="col-md-5 btn">Google</button>
</row>
</body>
<script type="text/javascript">
$document.ready(function ()
$('#GoogleBtn').click(function ()
window.location.href="RedirectUrl"
);
);
</script>
在 Asp.net MVc 中, 存在两个动作 - 外部登录和外部登录回调
调用外部登录- http://localhost:49837/Account/ExternalLogin?provider=Google&returnUrl=%2f 将返回错误-'所需的防伪表单字段“__RequestVerificationToken”不存在。'
调用 externallogincallback- http://localhost:49837/Account/ExternalLoginCallback?provider=Google&returnUrl=%2f&generateState=true 将重定向到另一个视图 (~/Views/Account/Login),其中包含一个用于 Google 的按钮。 单击该按钮后,它会将我带到 Google SignInPage,其中包含要处理和登录的所有请求参数。
我希望我的应用直接重定向到 Google 登录页面,而无需转到帐户/登录视图,然后在单击 Google 按钮时重定向到登录页面。
有人帮助我了解如何为我的 mvc 应用程序获取 redirectUrl。
更新:
Oauth 请求 url/Google 登录请求 url 就是我曾经的样子 寻找,我对redirectUrl感到困惑。我找到了一种方法 构建请求网址,我成功拨打电话 javascript。
【问题讨论】:
重定向 URI 是 google 将认证返回的页面。它是在 Google 开发者控制台中为您的凭据设置的。这不是你拿来的东西。 感谢您抽出宝贵时间回复。我实际上是在尝试让 RequestUrl 向 Google Signin 执行宣誓请求,我在整个问题中都提到了 redirectUrl。 我只是想知道您为什么使用 JavaScript 而不是官方的 Google。网络客户端库。 【参考方案1】:此代码允许我向 Google 登录页面发出 Oauth 请求。
MyLogin.cshtml
<row>
<button id="GoogleBtn" type="button" class="col-md-5 btn btn-danger" onclick="googleLogin()">Google</button>
</row>
<script type="text/javascript">
var OAUTHURL = 'https://accounts.google.com/o/oauth2/auth?';
var VALIDURL = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=';
var SCOPE = 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email';
var CLIENTID = 'xxxxxxxxxxxmyclientidxxxxx.apps.googleusercontent.com';
var REDIRECT = 'http://myapp.local/dashboard';
var LOGOUT = 'http://myapp.local/logout';
var TYPE = 'token';
var _url = OAUTHURL + 'scope=' + SCOPE + '&client_id=' + CLIENTID + '&redirect_uri=' + REDIRECT + '&response_type=' + TYPE;
function googleLogin()
window.location = _url;
</script>
【讨论】:
【参考方案2】:您好,您可以使用以下代码访问重定向网址
<script>
$(document).ready(function()
if (location.hash)
if (location.hash.split('access_token'))
var access_Token = location.hash.split('access_token=')
[1].split('&')[0];
sessionStorage.setItem("access_Token", access_Token)
);
【讨论】:
以上是关于asp.net mvc 中的 Google 身份验证 - 无法获取用于 Google 登录的 redirectUrl的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net MVC 5 身份验证与另一个 MVC 5 身份网站
IIS 中的 Asp.Net 核心 MVC 应用程序 Windows 身份验证
将 asp.net WebForms 应用程序中的组合表单/Windows 身份验证迁移到 asp.net MVC 应用程序