我正在尝试使用以下代码发布。我希望它返回令牌但返回错误405方法不允许。
<cfhttp method="POST" url="http://accounts.google.com/o/oauth2/token" >
<cfhttpparam type="Formfield" name="code" value="#url.CODE#">
<cfhttpparam type="Formfield" name="client_id" value="458381219741.apps.googleusercontent.com">
<cfhttpparam type="Formfield" name="client_secret" value="XXXXXXX">
<cfhttpparam type="Formfield" name="redirect_uri" value="http://console.mbwebportal.com/oauth2callback">
<cfhttpparam type="Formfield" name="grant_type" value="authorization_code">
</cfhttp>
上面的代码在http://console.mbwebportal.com/oauth2callback上,用户允许访问应用程序后,它会在url中获取代码。
请帮助!!
答案 0 :(得分:2)
我找到了答案:关键是使用cfhttpparam类型' body '。 根据livedocs“body:指定HTTP请求的主体.ColdFusion不会自动设置内容类型标头或URL对主体内容进行编码。要指定内容类型,请使用单独的cfhttp标记,其中type = header。”< / p>
下面的代码现在返回我的访问令牌:)
<cfset client_id = "458381219741.apps.googleusercontent.com">
<cfset client_secret = "**********">
<cfset callback = "http://console.mbwebportal.com/oauth2callback">
<cfset postBody = "code=" & UrlEncodedFormat(url.code) & "&">
<cfset postBody = postBody & "client_id=" & UrlEncodedFormat(client_id) & "&">
<cfset postBody = postBody & "client_secret=" & UrlEncodedFormat(client_secret) & "&">
<cfset postBody = postBody & "redirect_uri=" & UrlEncodedFormat(callback) & "&">
<cfset postBody = postBody & "grant_type=authorization_code">
<cfhttp method="post" url="https://accounts.google.com/o/oauth2/token">
<cfhttpparam name="Content-Type" type="header" value="application/x-www-form-urlencoded">
<cfhttpparam type="body" value="#postBody#">
</cfhttp>
答案 1 :(得分:0)
在此处找到类似的帖子Google OAuth 2 authorization - swapping code for token。他们的答案是url编码客户端密钥并重定向uri。在ColdFusion中,您可以使用URLEncodedFormat()
函数为您执行此操作。
<cfhttp method="POST" url="http://accounts.google.com/o/oauth2/token" >
<cfhttpparam type="Formfield" name="code" value="#url.CODE#">
<cfhttpparam type="Formfield" name="client_id" value="458381219741.apps.googleusercontent.com">
<cfhttpparam type="Formfield" name="client_secret" value="#URLEncodedFormat(XXXXXXX)#">
<cfhttpparam type="Formfield" name="redirect_uri" value="#URLEncodedFormat("http://console.mbwebportal.com/oauth2callback")#">
<cfhttpparam type="Formfield" name="grant_type" value="authorization_code">
</cfhttp>
请在使用之前验证您的url.CODE
值,因为任何内容都可以在网址中传递。