【问题标题】:Change Google default Auth Redirection - C# (Google liblary)更改 Google 默认身份验证重定向 - C#(Google 库)
【发布时间】:2014-11-23 15:44:24
【问题描述】:

我试试这个代码:https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web_applications

我的代码相同

但是!我需要更改此默认 url 重定向。 现在是:redirect_uri=http:%2F%2Flocalhost:52674%2FAuthCallback%2FIndexAsync

如何更改此网址?请各位大侠帮忙。

谢谢

【问题讨论】:

    标签: c# asp.net-mvc-4 google-api google-api-dotnet-client


    【解决方案1】:

    我还发现一开始更改 Google 的 OAuth 2.0 重定向 uri 确实很棘手,但事实证明它非常简单。你可以用不同的方式做到这一点。如果您遵循 Google 的 OAuth 2.0 Web 应用程序指南 (ASP.NET MVC),最简单的选择是在 AppFlowMetadata 类中覆盖 AuthCallback 字符串。

    https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth

    public override string AuthCallback
    {
        get { return @"/AuthCallback/Index"; }
    }
    

    您也可以实现自己的“AuthorizationCodeMvcApp”版本,但这太过分了。不要过溪去取水。 :)

    https://github.com/google/google-api-dotnet-client/tree/master/Src/GoogleApis.Auth.Mvc4/OAuth2/Mvc

    但如果你想这样做,这里有一个例子:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Web.Mvc;
    using Google.Apis.Auth.OAuth2.Mvc;
    using Google.Apis.Auth.OAuth2.Web;
    
    namespace ProjectName.GoogleCalendar
    {
            /// <summary>
            /// Thread-safe OAuth 2.0 authorization code flow for a MVC web application that persists end-user credentials.
            /// </summary>
            public class CustomAuthorizationCodeMvcApp : AuthorizationCodeWebApp
            {
    
                private readonly Controller controller;
                private readonly FlowMetadata flowData;
    
                /// <summary>Gets the controller which is the owner of this authorization code MVC app instance.</summary>
                public Controller Controller { get { return controller; } }
    
                /// <summary>Gets the <see cref="Google.Apis.Auth.OAuth2.Mvc.FlowMetadata"/> object.</summary>
                public FlowMetadata FlowData { get { return flowData; } }
    
                /// <summary>Constructs a new authorization code MVC app using the given controller and flow data.</summary>
                public CustomAuthorizationCodeMvcApp(Controller controller, FlowMetadata flowData)
                    : base(
                    flowData.Flow,
                    new Uri(controller.Request.Url.GetLeftPart(UriPartial.Authority) + "/CustomController" + flowData.AuthCallback).ToString(),
                    controller.Request.Url.ToString())
                {
                    this.controller = controller;
                    this.flowData = flowData;
                }
    
                /// <summary>
                /// Asynchronously authorizes the installed application to access user's protected data. It gets the user 
                /// identifier by calling to <see cref="Google.Apis.Auth.OAuth2.Mvc.FlowMetadata.GetUserId"/> and then calls to
                /// <see cref="Google.Apis.Auth.OAuth2.AuthorizationCodeWebApp.AuthorizeAsync"/>.
                /// </summary>
                /// <param name="taskCancellationToken">Cancellation token to cancel an operation</param>
                /// <returns>
                /// Auth result object which contains the user's credential or redirect URI for the authorization server
                /// </returns>
                public Task<AuthResult> AuthorizeAsync(CancellationToken taskCancellationToken)
                {
                    return base.AuthorizeAsync(FlowData.GetUserId(Controller), taskCancellationToken);
                }
            }
        }
    

    【讨论】:

    • 这是最简单的方法,非常有用。
    【解决方案2】:

    您可以继承表单 FlowMetadata 并覆盖 AuthCallback 属性。看看下面的链接:

    https://code.google.com/p/google-api-dotnet-client/source/browse/Src/GoogleApis.Auth.Mvc4/OAuth2/Mvc/FlowMetadata.cs?r=eb702f917c0e18fc960d077af132d0d83bcd6a88#49

    但是,您将能够更改相对 URL,但不能更改绝对 URL。

    如果您想使用完全不同的 URL,您需要创建自己的 AuthorizationCodeMvcApp 并将其构造函数更改为以下内容:

    public MyNewAuthorizationCodeMvcApp(Controller controller, FlowMetadata flowData)
            : base(
            flowData.Flow,
            < YOUR URL HERE >,
            controller.Request.Url.ToString())
        {
            this.controller = controller;
            this.flowData = flowData;
        }
    

    然后您可以将其插入您的流程,而不是默认的 AuthorizationCodeMvcApp(库的默认实现)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2018-01-19
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2015-01-15
    • 2015-02-25
    相关资源
    最近更新 更多