标签: api-key

在Android中存储API密钥,是否足够晦涩?

我正在使用Dropbox API.在示例应用程序中,它包括以下行:

// Replace this with your consumer key and secret assigned by Dropbox.
// Note that this is a really insecure way to do this, and you shouldn't
// ship code which contains your key & secret in such an obvious way.
// Obfuscation is good.
final static private String CONSUMER_KEY = "PUT_YOUR_CONSUMER_KEY_HERE";
final static private String CONSUMER_SECRET = "PUT_YOUR_CONSUMER_SECRET_HERE";
Run Code Online (Sandbox Code Playgroud)

我很清楚口头'秘密不是安全',混淆真的只会略微增加提取密钥所需的工作量.我不同意他们的声明'Obfustication is good'.那我该怎么做才能保护钥匙呢?obutustication 足够好,还是应该考虑更精细的东西?

obfuscation android key api-key dropbox-api

9
推荐指数
1
解决办法
4637
查看次数

如何保护.NET应用程序中的API密钥

我的应用程序访问了许多Web服务,例如Twitter和Flickr.它使用来自这些服务的API密钥,我想在我的二进制文件中对它们进行模糊处理.(我真的不担心盗版或其他什么,我只需要保密这些密钥.)

什么是最好的方法呢?

如果我将它们存储为const SecureString,是否会使它们无法存储?MSDN描述说文本"不再需要时从计算机内存中删除",但不是常量内存中的常量?

Dotfuscator会在我的装配中掩盖它吗?(假设我可以让它工作.)

.net security obfuscation dotfuscator api-key

9
推荐指数
2
解决办法
1550
查看次数

为我的API实现API密钥

我已经创建了一个api,我希望能够控制谁使用它,经常等等.我想要一个API密钥策略,以便用户必须提供密钥才能使用API​​.但是我不知道如何实现它.用户使用用户名和密码注册.我想到的是当用户登录并将其存储在数据库的表中时分配UUID.然后每个请求都包含此uuid,并在服务器上的每个请求中进行检查.

但这似乎不对.有人可以解释一下创建api键的步骤,比如dropbox,twitter,facebook等吗?我想尝试自己实现这个.

javascript java spring api-key node.js

9
推荐指数
1
解决办法
6896
查看次数

Fabric/Crashlytics Android为Apikey添加字符串资源会导致Crashlytics Developer Tools Error

在我的Android应用程序中,我在中添加了以下字符串资源

AndroidManifest.xml中

 <meta-data
  android:name="io.fabric.ApiKey"
 android:value="@string/fabric_key" />
Run Code Online (Sandbox Code Playgroud)

并在strings.xml中

 <string name="fabric_key">XXXXXXXXXXXXXXXXXXXXXXXX</string>
Run Code Online (Sandbox Code Playgroud)

当我尝试构建项目时,我收到以下错误:

Error:Execution failed for task ':app:fabricGenerateResourcesDevDebug'.
Crashlytics Developer Tools error.
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

android api-key fabric.io

9
推荐指数
1
解决办法
1706
查看次数

Api密钥和Django Rest Framework Auth Token

我已经在使用内置的Django rest auth令牌了,我打算发布一个其他api,它将被外部集成调用,在我的Django应用程序中调用一些动作.问题是我想为这个外部api调用生成另一个令牌,该令牌必须与auth系统分开(如Mandrill API Keys或Github Personal Access Token).从Django rest框架authtoken模型生成api密钥是一个很好的解决方案吗?

外部api令牌:

  • 必须永不过期(它可能会在会话auth系统中失效)
  • 可以链接到用户但不是必需的(如果链接到帐户)
  • 可以被撤销和重新激活

你有发布api密钥的经验吗?

这是Django Rest Framework推荐的最佳实践吗?

谢谢 ;)

python authentication django api-key django-rest-framework

9
推荐指数
2
解决办法
4571
查看次数

SafetyNet认证中是否需要api密钥?

我已成功为SafetyNet认证创建了后端服务和Android客户端.当我将jws令牌发送到我的服务器并尝试验证它的证书时,事实证明没有签署它的证书.

我应该在我的Android应用程序中添加api密钥吗?

我的认证结果:

eyJhbGciOiJSUzI1NiIsIng1YyI6WyJNSUlFaURDQ0EzQ2dBd0lCQWdJSWNkK3ZTTGZWdWxrd0RRWUpLb1pJaHZjTkFRRUxCUUF3U1RFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBb1RDa2R2YjJkc1pTQkpibU14SlRBakJnTlZCQU1USEVkdmIyZHNaU0JKYm5SbGNtNWxkQ0JCZFhSb2IzSnBkSGtnUnpJd0hoY05NVFl3TnpFeU1UVTBNelUwV2hjTk1UY3dOekV4TURBd01EQXdXakJzTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCd3dOVFc5MWJuUmhhVzRnVm1sbGR6RVRNQkVHQTFVRUNnd0tSMjl2WjJ4bElFbHVZekViTUJrR0ExVUVBd3dTWVhSMFpYTjBMbUZ1WkhKdmFXUXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3WEtyS0ZRRlBTckthS252NG9MSUhXNlVVMEk2STV2Q1FERFJOUlg2NWQrMVJLUWg0aDNoUHlTQ21MR2thREg0Q3Rud1lCdmRhWmZHUnVJVWx4K21zRjlkbU8rZzR0U2tSaXdrRzBxZ1VVN3docDk2ZHJoZkFrdDdPc2RzUWhmQWlTcmljdDlrTTRISElOVFVadjU0bXhkQmI0SkVBSlAvWlBDL2h5alAwRnlwNFlWVkdGN3RrQ09zUTVzYlB3cTBrbVJ0citobG41TXYwN1oxdkQwTG1MMU8yQy9qQUVCWGlhV3IzTjltenRXK2w3dEllOW1yY3FvUTB1UXdDWTd6YWdjb1czeFRmVExKVGdGTU5ZU0RtaDBEV2NZZUhidjNHQUtTR0hCSWZIWlQranhhZTlwam5pSi8zY3VmOWhVcUZPTGV3blI0TGdiTzNtSlc4a0dtWVFJREFRQUJvNElCVHpDQ0FVc3dIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUIwR0ExVWRFUVFXTUJTQ0VtRjBkR1Z6ZEM1aGJtUnliMmxrTG1OdmJUQm9CZ2dyQmdFRkJRY0JBUVJjTUZvd0t3WUlLd1lCQlFVSE1BS0dIMmgwZEhBNkx5OXdhMmt1WjI5dloyeGxMbU52YlM5SFNVRkhNaTVqY25Rd0t3WUlLd1lCQlFVSE1BR0dIMmgwZEhBNkx5OWpiR2xsYm5Sek1TNW5iMjluYkdVdVkyOXRMMjlqYzNBd0hRWURWUjBPQkJZRUZON1FsYndMa3BYbUNQbmxLS3FFdDdvc0JpYW5NQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVTdDBHRmh1ODltaTFkdldCdHJ0aUdycGFnUzh3SVFZRFZSMGdCQm93R0RBTUJnb3JCZ0VFQWRaNUFnVUJNQWdHQm1lQkRBRUNBakF3QmdOVkhSOEVLVEFuTUNXZ0k2QWhoaDlvZEhSd09pOHZjR3RwTG1kdmIyZHNaUzVqYjIwdlIwbEJSekl1WTNKc01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQnV4UEpqeE9GcjlqOEJUT0swbGhNNy8zVUN3d2RjSTFFZExmRGx4NmJCWW53SmVPUThKdC9Vd1VkcTFGTWRMM2gydkVTYVFkUVdYQTVCWE9YenI1TXV2V0xYaldKRjRsb0E4VzBTVDQyUDd6MWsyT29qb3JsNXZabkhjY08vZzhFd0ZpRlVINCsydXF1NVFzWmpVZGxMS2FFUWhJZTcvU2x2Qk41eHlZd0RaMlp0R00rdlVnVlFkbXpaV0puTGNHZFVSUGN3N2tlOWlNTFZKcXUrR0Z4c1lJSXYwMW1EQlVlblNUNFRsYWlEUG1nUmwzN3lCQWpUNGVaQlBIRzBGUzhna3FKZzAzMnhjNFdPNE1WMk1ZeEN0NWVzSllaOU04Y09QRFVjOEVYOUlwbC9FT1IrL25Mb2NRSEhIazhJQlhsbDVGM2lnN1RpOGFCNTJUMFdRaEIrIiwiTUlJRDhEQ0NBdGlnQXdJQkFnSURBanFTTUEwR0NTcUdTSWIzRFFFQkN3VUFNRUl4Q3pBSkJnTlZCQVlUQWxWVE1SWXdGQVlEVlFRS0V3MUhaVzlVY25WemRDQkpibU11TVJzd0dRWURWUVFERXhKSFpXOVVjblZ6ZENCSGJHOWlZV3dnUTBFd0hoY05NVFV3TkRBeE1EQXdNREF3V2hjTk1UY3hNak14TWpNMU9UVTVXakJKTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNoTUtSMjl2WjJ4bElFbHVZekVsTUNNR0ExVUVBeE1jUjI5dloyeGxJRWx1ZEdWeWJtVjBJRUYxZEdodmNtbDBlU0JITWpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSndxQkhkYzJGQ1JPZ2FqZ3VEWVVFaThpVC94R1hBYWlFWis0SS9GOFluT0llNWEvbUVOdHpKRWlhQjBDMU5QVmFUT2dtS1Y3dXRaWDhiaEJZQVN4RjZVUDd4YlNEajBVL2NrNXZ1UjZSWEV6L1JURGZSSy9KOVUzbjIrb0d0dmg4RFFVQjhvTUFOQTJnaHpVV3gvL3pvOHB6Y0dqcjFMRVFUcmZTVGU1dm44TVhIN2xOVmc4eTVLcjBMU3krckVhaHF5ekZQZEZVdUxIOGdaWVIvTm5hZytZeXVFTldsbGhNZ1p4VVlpK0ZPVnZ1T0FTaERHS3V5Nmx5QVJ4em1aRUFTZzhHRjZsU1dNVGxKMTRyYnRDTW9VL000aWFyTk96MFlEbDVjRGZzQ3gzbnV2UlRQUHVqNXh0OTcwSlNYQ0RUV0puWjM3RGhGNWlSNDN4YStPY21rQ0F3RUFBYU9CNXpDQjVEQWZCZ05WSFNNRUdEQVdnQlRBZXBob2pZbjdxd1ZrREJGOXFuMWx1TXJNVGpBZEJnTlZIUTRFRmdRVVN0MEdGaHU4OW1pMWR2V0J0cnRpR3JwYWdTOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01DNEdDQ3NHQVFVRkJ3RUJCQ0l3SURBZUJnZ3JCZ0VGQlFjd0FZWVNhSFIwY0RvdkwyY3VjM2x0WTJRdVkyOXRNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUF3TlFZRFZSMGZCQzR3TERBcW9DaWdKb1lrYUhSMGNEb3ZMMmN1YzNsdFkySXVZMjl0TDJOeWJITXZaM1JuYkc5aVlXd3VZM0pzTUJjR0ExVWRJQVFRTUE0d0RBWUtLd1lCQkFIV2VRSUZBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQ0U0RXA0Qi9FQlpEWGdLdDEwS0E5TENPMHE2ejZ4RjlrSVFZZmVlUUZmdEpmNmlaQlpHN2VzbldQRGNZQ1pxMng1SWdCelV6Q2VRb1kzSU50T0F5bkllWXhCdDJpV2ZCVUZpd0U2b1RHaHN5cGI3cUVaVk1TR05KNlpsZElEZk0vaXBwVVJhVlM2bmVTWUxBRUhEMExQUHN2Q1FrMEU2c3BkbGVIbTJTd2Flc1NEV0IrZVhrbkdWcHpZZWtRVkEvTGxlbGtWRVNXQTZNQ2FHc2VxUVNwU2Z6bWhDWGZWVURCdmRtV0Y5ZlpPR3JYVzJsT1VoMW1Fd3BXanFOMHl2S25GVUV2L1RtRk5XQXJDYnRGNG1tazJ4Y3BNeTQ4R2FPWk9OOW11SUFzMG5INUFxcTNWdUR4M0NRUms2KzBOdFpsbXd1OVJZMjNuSE1BY0lTd1NIR0ZnPT0iXX0.eyJub25jZSI6IlVFMTViamRaVUVNdk4ybFJNRU5UVTJwQ1VXdE1Rak51VEU1WWRtOXZabnBPUm14WkwzcEhibXRWV21oS1ZrSkJTa3R1S3pkWFJHbDBUVnBzYkZORFppOWFMMjlGZUVKa2NEVnllQzlwUTFWUlluVlVlV2M5UFE9PSIsInRpbWVzdGFtcE1zIjoxNDkwNzg3MTQ3MzYxLCJhcGtQYWNrYWdlTmFtZSI6ImNvbS5leGFtcGxlLnNhbXBsZSIsImFwa0RpZ2VzdFNoYTI1NiI6ImtXVWZ3ZlpCSU9ib2UzRGtMM2RkeTFBbm1VdjM3cDFVYlduZ1Fkd1gwZHM9IiwiY3RzUHJvZmlsZU1hdGNoIjp0cnVlLCJleHRlbnNpb24iOiJDUVlZdUQyUmRqQVkiLCJhcGtDZXJ0aWZpY2F0ZURpZ2VzdFNoYTI1NiI6WyJ3ZU93UTZLUWdFZGx2bXJIV0VCRDlyZm96YnF6ZWU0ZlpPT2FXclpoc2NvPSJdLCJiYXNpY0ludGVncml0eSI6dHJ1ZX0.JXOvgIx0PufdyJ72Vo-FvTb_6Dwj7gcSxlXWHt8siVrgK2eMQA3V_eYbXS7NYkNUEXLLMNIfm8qEIwJQGYLUKE9GyaHjjuFt_YOkQMOzC8hh9VpIekS8bc_eRfvVajXzrFSRAigOnfVBrMGrVVpxsqtjqz1Y9ochGHwrjO2b8oZyw06HjzsnuT9YpLXakBg1azOYx9KP-_XkDaKW6_Lkfn6Rmo8hpatadIF5qn54W_UkXvvsG7d4P8h_7uvO66rRhK1OXg3Qhazta3B_XFtiLcmusaqmglopEW1hI07FAvrqzemuY-_4EcvReLKfo84rl_BuJmLFVtQtDyAHtzngxw
Run Code Online (Sandbox Code Playgroud)

android api-key google-play-services android-security safetynet

9
推荐指数
1
解决办法
1500
查看次数

如何在 Android 应用程序中隐藏 API 密钥?

在我的应用程序中,我使用谷歌地图 api 密钥与谷歌通信。我在 gradle 调试/发布配置中定义了这个 MAP_KEY,如下所示:

debug {
            buildConfigField 'String', 'BASE_URL', '"https://myweb.com"'
            buildConfigField 'String', 'SOCKET_URL', '"https://socket.myweb.com"'
            buildConfigField 'String', 'MAP_KEY', '"azaS****Ds"'
        }
Run Code Online (Sandbox Code Playgroud)

但是如果有人从谷歌游戏商店下载我的应用程序并反编译它,他将获得我的 API 令牌。这是真的?如果是,在我的代码中隐藏 api 密钥的方法是什么?

android environment-variables api-key

9
推荐指数
1
解决办法
1万
查看次数

如何在 AndroidManifest.xml 中隐藏 API 密钥

我刚刚启动了Flutter 的Google 地图插件,它要求我将生成的 API 密钥插入AndroidManifest.xmlandroid/app/src/main/AndroidManifest.xml. 几分钟后,我将其提交到我的存储库,并立即收到来自 Google 和 Git 的警告,要求更改生成新密钥等(不知道你不应该这样做,所以我现在很清楚)。

之后,我开始寻找隐藏 API 密钥的方法。一种解决方案是使用Flutter 安全存储插件,但这仅在.dart文件内有帮助(我认为)。另一种方法是创建一个单独的文件并将其添加到 .gitignore,但是当我构建 APK 时,该文件是否也会被捆绑?

理想情况下,我想发布它,但我不希望密钥易于访问,那么如何在AndroidManifest.xml不使用明文的情况下将 API 密钥加载到文件中?我想避免使用后端,所以我想我可以手动散列它,然后在运行时取消散列,但我仍然不知道如何动态更改文件AndroidManifest.xml

security android api-key flutter

9
推荐指数
1
解决办法
6984
查看次数

在 Node js 应用程序中为用户生成唯一的 api 密钥以访问您的 api

如何根据数据库中用户的不同参数为 Nodejs 应用程序的用户生成 API 密钥,以便访问我们的服务器端点。

database api api-key node.js server

9
推荐指数
2
解决办法
1万
查看次数

如何在 local.properties 中存储地图 api 密钥并在 AndroidManifest.xml 中使用它

我正在使用 Jetpack Compose 并尝试将 Google 地图集成到我的应用程序中。我已按照文档设置API 密钥。但是,我在构建项目时遇到错误。在我的local.properties文件中,我有以下代码:

MAPS_API_KEY=my_api_key
Run Code Online (Sandbox Code Playgroud)

在我的AndroidManifest.xml我有以下代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.guidemetravelersapp">
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.GuideMeTravelersApp">
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
    <activity
        android:name=".homescreen.HomeScreen"
        android:exported="true"
        android:label="@string/title_activity_home_screen"
        android:theme="@style/Theme.GuideMeTravelersApp.NoActionBar" />
    <activity
        android:name=".registerview.RegisterView"
        android:exported="true"
        android:label="@string/title_activity_register_view"
        android:theme="@style/Theme.GuideMeTravelersApp.NoActionBar" />
    <activity
        android:name=".ExperienceDetailsView.ExperienceDetailsActivity"
        android:exported="true"
        android:label="@string/title_activity_experience_details"
        android:theme="@style/Theme.GuideMeTravelersApp.NoActionBar" />
    <activity
        android:name=".LoginView.LoginActivity"
        android:exported="true"
        android:label="@string/title_activity_login"
        android:theme="@style/Theme.GuideMeTravelersApp.NoActionBar" />
    <activity
        android:name=".MainActivity"
        android:exported="true"
        android:label="@string/app_name"
        android:theme="@style/Theme.GuideMeTravelersApp.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud) 但是,这似乎还不够,因为在构建项目以查看预览时出现以下错误:
java.lang.IllegalStateException: A required meta-data tag in your app's …
Run Code Online (Sandbox Code Playgroud)

google-maps api-key kotlin android-jetpack-compose

9
推荐指数
2
解决办法
1万
查看次数