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 回答
您不通过区块链驾驶舱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
您无法使用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并调用区块链 .
例如要在区块链中发布交易:
并且,如果要从区块链查询事务,请将invoke替换为查询 .