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 身份网站

ASP.NET MVC 3 文件夹结构

IIS 中的 Asp.Net 核心 MVC 应用程序 Windows 身份验证

使用身份验证 ASP.NET MVC 中的用户

ASP.NET MVC 5 中的基本身份验证

将 asp.net WebForms 应用程序中的组合表单/Windows 身份验证迁移到 asp.net MVC 应用程序