带有Asp.Net的增量式Google OAuth Owin Oauth [英] Incremental Google OAuth with Asp.Net Owin Oauth

查看:80
本文介绍了带有Asp.Net的增量式Google OAuth Owin Oauth的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种解决方案,可以使用Asp.Net的Owin OAuth库对Google的api进行增量授权.

I'm looking for a solution to doing incremental authorization against Google's api's with Asp.Net's Owin OAuth Libraries.

我知道如何为特定的api设置范围,但是我想逐步进行设置,只能看到如何在全局范围内进行设置.

I know how to set scope for specific api's, but I would like to do it incrementally and can only see how to set it on globally.

Google Oauth增量式身份验证上的文档... https://developers.google.com/accounts/docs/OAuth2WebServer#incrementalAuth

Doc on Google Oauth Incremental Auth... https://developers.google.com/accounts/docs/OAuth2WebServer#incrementalAuth

当前的VB代码...

Current VB Code...

Public Sub ConfigureAuth(app As IAppBuilder)

    Dim googleCreds = New GoogleOAuth2AuthenticationOptions() With {
                .ClientId = "xxxx",
                .ClientSecret = "xxx"
    }

    googleCreds.Scope.Add("https://www.googleapis.com/auth/analytics.readonly")
    app.UseGoogleAuthentication(googleCreds)

    ' Would like to add another way to specify GoogleDrive, YouTube, Google+ scopes
    ' Example code that doesn't work that would add a 2nd Google Oauth Listener
    googleCreds.Scope.Clear()
    googleCreds.Scope.Add("https://www.googleapis.com/auth/drive.file")
    googleCreds.AuthenticationType = "GoogleDrive"
    app.UseGoogleAuthentication(googleCreds)

End Class

推荐答案

这是我想出的解决方案.它涉及到在URL中传递"scope"参数,然后在身份验证"选项的"OnApplyRedirect"函数中对其进行解析,然后将正确的作用域URL手动注入到重定向URL中.

Here is the solution I came up with. It involves passing a "scope" parameter in the url and then parsing that in the "OnApplyRedirect" function of the Authentication options and then manually injecting the correct scope url into the redirect url.

    Dim googleCreds = New GoogleOAuth2AuthenticationOptions() With {
        .ClientId = "xxx",
        .ClientSecret = "xxx",
        .Provider = New Microsoft.Owin.Security.Google.GoogleOAuth2AuthenticationProvider() With { _
            .OnApplyRedirect = Function(context)
                                   Dim queryString = HttpContext.Current.Request.QueryString.ToString()
                                   Dim queryParms = HttpUtility.ParseQueryString(queryString)

                                   ' Change the value of "redirect" here
                                   ' e.g. append access_type=offline
                                   Dim redirect As String = context.RedirectUri
                                   redirect += "&access_type=offline"
                                   redirect += "&approval_prompt=force"
                                   redirect += "&include_granted_scopes=true"

                                   Dim uri = New Uri(redirect)

                                   If (Not String.IsNullOrEmpty(queryParms.Get("scope"))) Then
                                       Dim scope = queryParms.Get("scope")
                                       Dim redirectQueryString = HttpUtility.ParseQueryString(uri.Query)
                                       Select Case scope
                                           Case "Analytics"
                                               redirectQueryString.Set("scope", "https://www.googleapis.com/auth/analytics.readonly")
                                           Case "YoutTube"
                                               redirectQueryString.Set("scope", "https://gdata.youtube.com")
                                           Case "Drive"
                                               redirectQueryString.Set("scope", "https://www.googleapis.com/auth/drive.file")
                                           Case Else
                                               LoggingUtility.LogErrorMessage("Invalid scope passed in: scope: " + scope)
                                       End Select
                                       redirect = uri.GetLeftPart(UriPartial.Path) + "?" + redirectQueryString.ToString()
                                   End If

                                   context.Response.Redirect(redirect)

                               End Function, _
        }
    }

    'Google Analytics
    app.UseGoogleAuthentication(googleCreds)

这篇关于带有Asp.Net的增量式Google OAuth Owin Oauth的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆