我想将一些代码推送到我的GitHub存储库.这些代码是在像不同的语言Javascript,Java,Python等某些代码包含了一些私人API,我不想公布关键.
有没有办法自动隐藏它?我应该手动将其从我的代码中删除吗?
我想推动很多项目.因此,手动删除不是一个好选择.
我正在使用phil sturgeon REST_Controller为codeigniter创建一个REST api,到目前为止我已经能够创建一个简单的库来为用户生成api密钥.我的问题是现在为每个请求发送api密钥到API,如何在不必为每个请求手动发送它的情况下执行此操作.
我想存储一个秘密密钥("abc123"),我将在我的REST API请求的标头中使用.我的服务器将检查此密钥.如果它匹配"abc123",则允许发出请求.
我正在考虑一个简单的解决方案,如:
let secret = "abc123"
Run Code Online (Sandbox Code Playgroud)
但这会有任何挫折吗?
我有一个我在Node.js应用程序中使用的API密钥.目前,我将它保存在一个文本文件中,并在我的应用程序启动时将其放在一个全局变量中.
Sooo基本上只是:
var key = getKey();
useKeyGetData(key);
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个全局变量,在文件之间传递是一件痛苦的事.有没有更好的方法来获取我的钥匙在何时/何时需要它?这样做有一些标准吗?
我有一个使用两个第三方服务的React应用程序.该应用程序已开始使用react-create-app.
这两项服务都需要API密钥.
一个密钥通过脚本标记提供,如下所示:
<script type="text/javascript" src="https://myapi?key=MY_KEY">
</script>
Run Code Online (Sandbox Code Playgroud)
另一个API密钥用于请求中.我将实际的密钥存储在一个常量中,并使用它来形成请求.像这样:
const MY_OTHER_KEY = 'MY_OTHER_KEY'
let url = `http://myotherapi?key=${MY_OTHER_KEY}&q=${query}`
Run Code Online (Sandbox Code Playgroud)
谷歌处理API密钥的最佳做法提示:
不要直接在代码中嵌入API密钥
这让我想到了第一个问题:
1.如何使用变量index.html?
在我的index.html文件中,我有两个看起来像这样的标签:
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
Run Code Online (Sandbox Code Playgroud)
显然,%PUBLIC_URL%是一个变量.如何添加变量%MY_KEY%以避免直接在我的代码中嵌入API密钥?
得到这样的东西:
<script type="text/javascript" src="https://myapi?key=%MY_KEY%">
</script>
Run Code Online (Sandbox Code Playgroud)
与此问题相关,将API密钥存储在常量中是否安全,就像我一样MY_OTHER_KEY?
谷歌还说:
不要将API密钥存储在应用程序源代码树中的文件中
这让我想到了第二个问题:
2. API密钥是否仍然在捆绑中?
说我做谷歌和我说的话
...将它们存储在环境变量或应用程序源树之外的文件中
假设我将密钥存储在外部文件中.我认为,该文件将在某个时刻被读取,并且它的内容要么在包中复制,要么以其他方式引用.最后,密钥是否仍然可以在捆绑中看到,除非可能更难找到?这对此有何帮助?
3.在react应用程序中是否有使用API密钥的canonic方法?或者由个人开发人员决定?
自我解释,我正在寻找解决这个问题的反应方式,如果有的话.
谢谢您的帮助!
所以,我正在开发一个仅供我自己使用的小应用程序,也许是一个关于Git的开源项目.我正在使用Envato Marketplaces的API,众所周知,有些操作不需要任何密钥,但同时也有一些需要.
我首先在PHP中为Envato API做了一个很好的API包装器,但后来我决定用JavaScript进行一些实验,所以我用JavaScript开发了相同的包装器.到目前为止,我对公共操作没有任何问题,但我现在必须使用API密钥.
我的问题是,如果有一种方法可以保护JavaScript中的API密钥.我不能把它放在纯文本中,因为它可以被看到代码的其他人使用.那么API会保密吗?也许从XHR的JSON文本文件中获取它?
我在create-react-app中制作了一个天气应用程序.如何隐藏API密钥以便我可以提交给GitHub?
现在关键是在App.js中:const API_KEY ="123456";
我目前在我的应用程序中使用MapActivity.我使用2个API密钥.一个用于调试,一个用于"生产"
我厌倦了在xml布局中更改这些值:
<view class="com.google.android.maps.MapView"
android:id="@+id/myGmap"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="@string/api_key_prod" />
Run Code Online (Sandbox Code Playgroud)
我厌倦了每次尝试更改apikey并且每次都通过调试替换prod.
是否可以在我的应用程序的onCreate()中更改此键.
想象一下,我有一个布尔首选项,如:isDebug.
我可以检查我的手机上的首选项,并默认在用户应用程序上禁用它.做一些像:
if (isDebug)
myMap.setApiKey(R.string.api_key_debug)
else
myMap.setApiKey(R.string.api_key_prod)
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助.
我正在尝试将Google地图添加到may app中,所以我已经使用了API密钥.不幸的是,当我通过元数据标签在manifest.xml中插入API密钥时,它会在编译时自动插入另一个元数据标记,如下所示.现在它产生下面提到的错误.最糟糕的情况是,即使我删除它们中的每一个或两者,它也会在编译时自动生成两个标记并抛出错误.
有帮助吗?
错误
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.exampl.t_collect/com.exampl.t_collect.activity.MapActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2389)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2441)
at android.app.ActivityThread.access$900(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
.........
Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
..........
Caused by: java.lang.RuntimeException: The API key can only be specified once. It is recommended that you use the meta-data tag with the name: com.google.android.geo.API_KEY in the <application> element of AndroidManifest.xml …Run Code Online (Sandbox Code Playgroud) 我已使用Google Developers Console将Google Maps SDK与iOS集成.
但是当我现在运行应用程序时,它会给我以下错误.
ClientParametersRequest失败,剩余3次尝试(0 vs 5).
Error Domain=com.google.HTTPStatus Code=400 "The operation couldn’t be completed.(com.google.HTTPStatus error 400.)" UserInfo=0xb83c2a0 {data=<CFData 0xc13d600 [0xe7a4d8]>{length = 145, capacity = 256, bytes = 0x3c48544d4c3e0a3c484541443e0a3c54 ... 3c2f48544d4c3e0a}}
Run Code Online (Sandbox Code Playgroud)
然后它说
Google Maps `SDK` for `iOS` cannot connect or validate APIKey:
Error Domain=com.google.HTTPStatus Code=400 "The operation couldn’t be completed.
(com.google.HTTPStatus error 400.)" UserInfo=0x94bf990 {data=<CFData 0x907df90 [0xe7a4d8]>
{length = 145, capacity = 256, bytes = 0x3c48544d4c3e0a3c484541443e0a3c54 ... 3c2f48544d4c3e0a}}
Run Code Online (Sandbox Code Playgroud)
我已经请求了密钥,我使用相同的40个字符密钥.我也尝试重新生成密钥,然后使用它.我在网上搜索过,有人说应该在"服务"中启用"谷歌SDK for iOS".在我的案例中也启用了这一点.
但没有任何作用.有人见过同样的问题吗?
api-key ×10
google-maps ×3
android ×2
api ×2
github ×2
ios ×2
reactjs ×2
security ×2
codeigniter ×1
cryptography ×1
frontend ×1
git ×1
javascript ×1
key ×1
node.js ×1
php ×1
rest ×1
secret-key ×1