首页 文章

检索Cloud Foundry OAuth令牌,但在POST到REST API时获取{“error”:“Not authorized”}

提问于
浏览
0

SAP Cloud 平台使用Cloud Foundry来托管其部分服务,如HyperLedger等 .

如果我手动执行以下操作:

我在https://login.cf.us10.hana.ondemand.com/login使用有效的用户名/密码登录到 Cloud 代工厂实例

然后将我重定向到另一个主机“blockchain-cockpit.cfapps.us10.hana.ondemand.com”,在那里我可以通过网页上提供的“驾驶舱”成功调用RESTful API .

我的目标是能够使用OAuth令牌在“blockchain-cockpit.cfapps.us10.hana.ondemand.com”上调用RESTful服务 .

所以我使用以下命令转到命令行获取OAuth令牌:

curl -v -XPOST -H "Application/json" -u "cf:" --data "username=<username>&password=<password>&client_id=cf&grant_type=password&response_type=token" https://login.cf.us10.hana.ondemand.com/oauth/token

并且很高兴地把我带回来*似乎是一个有效的“令牌” .

例如:

{ “的access_token”:“eyJhbGciOiJSUzI1NiIsImtpZCI6ImtleS0xIiwidHlwIjoiSldUIn0.eyJqdGkiOiJmZTY1NjYyOTM3YTk0Nzc0YTUyYmM5MzRiYzU5MjRjOCIsInN1YiI6ImMxYzcyZTcyLWI3OGUtNDAyYy1iZTBjLWQ3MDUyNzYzZmZmYiIsInNjb3BlIjpbIm9wZW5pZCIsInVhYS51c2VyIiwiY2xvdWRfY29udHJvbGxlci5yZWFkIiwicGFzc3dvcmQud3JpdGUiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIl0sImNsaWVudF9pZCI6ImNmIiwiY2lkIjoiY2YiLCJhenAiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiJjMWM3MmU3Mi1iNzhlLTQwMmMtYmUwYy1kNzA1Mjc2M2ZmZmIiLCJvcmlnaW4iOiJsZGFwIiwidXNlcl9uYW1lIjoia2V2aW5AZXJwZ2VuaWUuY29tIiwiZW1haWwiOiJrZXZpbkBlcnBnZW5pZS5jb20iLCJhdXRoX3RpbWUiOjE1MTU4NzE4NTgsInJldl9zaWciOiI2YzIwMjc2YyIsImlhdCI6MTUxNTg3MTg1OCwiZXhwIjoxNTE1ODcyNDU4LCJpc3MiOiJodHRwczovL3VhYS5jZi51czEwLmhhbmEub25kZW1hbmQuY29tL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiYXVkIjpbImNsb3VkX2NvbnRyb2xsZXIiLCJwYXNzd29yZCIsImNmIiwidWFhIiwib3BlbmlkIl19.WgYaTeDqGcJfOpidmTLi06tJnDTC8eGigyWAaEsfDkRmOEWWJhK48dJVjZ43yCh_aECgKq__SUq7kLc48_yWRQ7fjDQSLPXRoZu-4X1YvVB-Xi68PnYAOTtnJFN_F7e6E43mLLNA5_5CdXJ8n88__sJX EoDknrI2R8inmolwIm8AtlvZlh_kuFtF5zt6_RudWkheP8GH8cDBXEEolj0jZtONrJ7bs88E_M07Rgo-fXSdOa6bPMGBCiGPWHqSfLsXGgSaFgeNkBu9_MygAcjx3v3QsQissHfORgzixTCVxT0fyWvoLyc-AWM-NrUzSZNq1hl33l99-QDFWq8sTplSh1Gz1G9y9eJEcH3KI_ycR7FRPmJ4l7eIEjXJm-0r05wqKKwnu8rdkX5hrv55-7qqaM_K32Pug6Sb_lBKfuccz_X7bHWtV7IbybiX_-JU2-CljDAZb6DNl9iTkHhSSKcIODpbItM5BD_AiOuCO8RviuD-P142sjwOD-1dQ9YhsvzQ66UZMjt05FNT7_SaYaxU_i5F6IBXFBmY-zFioIMdJyehGatgaxylqvjS_C_xv0Q7cLW_vsJvlv14AWnBhjD_-KO6oUoGN-llxRK8bo-a56ssfz2eBgNJjjroNw1nAqWU4cFmsOgD3Jni3wIpjBSGzh-ogdx63LCK60DVBu5y1NE “ ”token_type“: ”承载“, ”refresh_token“:” eyJhbGciOiJSUzI1NiIsImtpZCI6ImtleS0xIiwidHlwIjoiSldUIn0.eyJqdGkiOiIzZmIxOWQ5NWU3ODY0ZWZhOTE2NTM4NzE3ZjM1YzAxMi1yIiwic3ViIjoiYzFjNzJlNzItYjc4ZS00MDJjLWJlMGMtZDcwNTI3NjNmZmZiIiwic2NvcGUiOlsib3BlbmlkIiwidWFhLnVzZXIiLCJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJwYXNzd29yZC53cml0ZSIsImNsb3VkX2NvbnRyb2xsZXIud3JpdGUiXSwiaWF0IjoxNTE1ODcxODU4LCJleHAiOjE1MTg0NjM4NTgsImNpZCI6ImNmIiwiY2xpZW50X2lkIjoiY2YiLCJpc3MiOiJodHRwczovL3VhYS5jZi51czEwLmhhbmEu b25kZW1hbmQuY29tL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9uYW1lIjoia2V2aW5AZXJwZ2VuaWUuY29tIiwib3JpZ2luIjoibGRhcCIsInVzZXJfaWQiOiJjMWM3MmU3Mi1iNzhlLTQwMmMtYmUwYy1kNzA1Mjc2M2ZmZmIiLCJyZXZfc2lnIjoiNmMyMDI3NmMiLCJhdWQiOlsiY2xvdWRfY29udHJvbGxlciIsInBhc3N3b3JkIiwiY2YiLCJ1YWEiLCJvcGVuaWQiXX0.SsG45uw8qhSU1ulJ54QZdX8bNnykgGXUwzklBme4sjpNjLd2BuJbW0PHBY7_bHbNiPXplqVGSHsIixaUu-QYqFzs2ebjaGRfBeb9ElwPymI7PRak2gGbw6W1lwHLRpYtIQDp5Ezl9Exj9H_4YW8x7WV4Ca2zRhA8BxayKN7yqSdObR7FVNH0o6-8ZtYcpsHVNKu8KCWCkZ4kEBj4jAHrPmH7FV1AQMSTBK8P-iTWmDbWvsaa0RKxkfveCie_ESgAFt-Y8ZO3mu3zqNCxD238fQc3GJvpE2TPbaAAaSCcTRLBVWLFCiV-2VpmY7Fmv4R80RnzMkV1vOrkNutHNc4NYi3 dYf7JNRJ60Nox1jQRqoMuAS_VSGTiHAnLoOPVf7s0Y09wKuIeVwfB2UHFhs7UtKM7egJGKeZFAOcHAZNL8qbyqkRi0bkOOEMD0mqvEvMHEeS1o5KmYQ7zrxyNgQJgwJ98zMgOzHmC3NQ8o_sNZKTurxNqaPFsbmoB2tCoI9AkfaVdeDOd8tiY6XBAu5h76O7pag9RV4ch_nmViAPYwpD_ZxvwhB_3X0oqSKKNKzZaLW9ONip7yBmMhCub48D_zT26bOKUIYenO1LAV5aHjufsut7YxWBadrPSpGF-Oz6VYYeDqCerf7F8-RDA-RZYGUQBK-weTLJAfbQPn6C gTO4“,”expires_in“:599,”scope“:”openid uaa.user cloud_controller.read password.write cloud_controller.write“,”jti“:”fe65662937a94774a52bc934bc5924c8“} *连接#0以主持login.cf.us10.hana .ondemand.com完好无损

假设我现在有一个有效的令牌,然后使用POSTMAN尝试POST并设置HTTP头:

Authorization: Bearer #token from above#

如前所述,我正在发布“blockchain-cockpit.cfapps.us10.hana.ondemand.com”而不是主持人,我得到了令牌,因此不确定这是否是一个主要问题 .

PostMan一直给我这个错误

{“错误”:“未经授权”}

然后我使用以下命令使用CURL尝试相同的操作:

curl -H "Authorization: Bearer <token>" -X POST https://blockchain-cockpit.cfapps.us10.hana.ondemand.com/<remaining rest api> --data "test data"

我得到完全相同的问题:

{"error":"Not authorized"} 因此,我的问题是,如果我手动登录并与网站上的api进行交互,它可以完美地运行,但是当我显然获得有效的令牌并尝试发布到其余的api时,它会一直失败吗?

有任何想法吗?我真的很感激这方面的一些帮助;-)

谢谢

林顿

2 回答

  • 0

    您不通过区块链驾驶舱API调用您的链码 .

    与SAP Cloud Platform上的所有其他服务(例如MongoDB)一样,您必须创建服务密钥/服务绑定才能访问您的服务实例 .

    • 登录SAP Cloud 平台(account.hana.ondemand.com

    • 导航到您创建区块链服务实例的空间,然后打开“服务实例”页面 .

    • 点击 name 打开您的区块链服务实例

    • 单击左侧导航栏中的“服务密钥”

    • 单击 Create Service Key 并指定名称

    • 您现在可以看到服务实例的访问信息

    {"apiKey":“", " serviceUrl ": " https://hyperledger-api.cfapps.us10.hana.ondemand.com”}

    您可以通过打开服务URL来测试API:https://hyperledger-api.cfapps.us10.hana.ondemand.com

    关于注释中的问题,要在部署的Java应用程序中注入此信息,您必须创建服务绑定并将区块链服务实例链接到您的应用程序 . 然后,您的服务密钥信息将被注入应用程序的环境变量中 . 更多信息:SAP Help

  • 0

    您无法使用OAuth令牌调用https://blockchain-cockpit.cfapps.us10.hana.ondemand.com . 在我看来,此URL不会公开您要使用的API,并且可能需要其他参数 .

    我希望您想要使用区块链API,有更好的方法来实现它 . 导航到https://login.cf.us10.hana.ondemand.com/login

    • 打开您创建的Blockchain服务实例 .

    • 创建具有有效名称的服务密钥 .

    • 创建服务密钥后,您将看到生成的json,其中包含apiKey和URL . 现在,您可以使用此URL并调用区块链 .

    例如要在区块链中发布交易:

    curl -X POST --header 'Content-Type: application/json;charset=UTF-8' --header 'Accept: application/json' --header 'apiKey: <apiKey_which_you_receive_after_servicekey_creation>' -d '{ 
      "chaincodeId": "your_chaincode_id",
      "fcn": "your_func_name",
      "args": []
    }
    ' '<URL_from_service_key_creation>/invoke'
    

    并且,如果要从区块链查询事务,请将invoke替换为查询 .

相关问题