什么是用户认证? (What is User Authentication?)

There is a user base associated with every app that is available on an app store. Whenever an application is downloaded, a user is attached to it. Now, this user bears a certain identity so that a distinction between two users can be made which is dependent on the use cases and the services offered by the business logic implemented in your app.

应用商店上有与每个应用相关联的用户群。 每当下载应用程序时,都会将用户附加到该应用程序。 现在,该用户具有特定的身份,因此可以根据应用程序中实现的用例和业务逻辑所提供的服务来区分两个用户。

Consider any social media platform, creating an account means bringing a new user into existence. Authentication serves several purposes this way. It can be allowing one user to interact with the other with the help of primary contact details they provided, or it can be informing the users about the latest developments associated with your product and other similar routines like providing a security layer for using the app.

考虑任何社交媒体平台,创建帐户就意味着要拥有一个新用户。 身份验证以这种方式用于多种目的。 它可以允许一个用户在他们提供的主要联系方式的帮助下与另一个用户进行交互,也可以向用户通知与您的产品和其他类似例行程序相关的最新发展,例如提供使用该应用程序安全层

什么是OAuth 2.0? (What is OAuth 2.0?)

https://oauth.net/

https://oauth.net/

OAuth 2.0 is the industry-standard protocol for authorization to integrate with services not just limited to mobile devices. Apart from authentication, OAuth framework offers protection to client secrets from attackers while preventing modifications to client secret and launching external applications.

OAuth 2.0是行业标准协议,用于授权与服务集成,而不仅限于移动设备。 除了身份验证外,OAuth框架还可以保护攻击者的客户端机密,同时防止修改客户端机密和启动外部应用程序。

Google登录和Google身份平台 (Google Sign-In and Google Identity platform)

Google Sign-In tools allow seamless integration of authentication services while it cuts on the friction and burden on the developer end. Google Sign-In allows users to register as new accounts or login already registered ones with just One Tap.

Google登录工具可以无缝集成身份验证服务,同时减少了开发人员的负担和负担。 Google登录可以使用户只需单击即可注册为新帐户或登录已注册的帐户

登录流程 (Sign-In Flow)

开关 (Switch)

Authentication best practices include allowing a user to sign-in using Google platform, sign-out, and revoke access from the identity platform which can be implemented by presenting the user with a choice, ideally with the help of buttons. Note that the Sign-In button can be customized to suit your theme, but it should always use a standard Google template.

身份验证最佳做法包括允许用户使用Google平台登录,注销和撤消从身份平台的访问权限,这可以通过向用户提供选择(最好是借助按钮)来实现。 请注意,可以自定义“登录”按钮以适合您的主题,但它应始终使用标准的Google模板。

The optimal user experience should present three base cases to the user, namely-

最佳的用户体验应向用户提供三种基本情况,即-

Sign-In

登入

Google Sign-In should be configured in such a way to request user data required by your app and check whether the user has already signed in.

应该配置Google登录,以便请求您的应用所需的用户数据,并检查用户是否已经登录。

Sign-Out

登出

Allow the user to Sign-Out from the app which disconnects the user temporarily and can later Sign-In again using a different account from the Google platform.

允许用户退出该应用,这会暂时断开用户的连接,以后可以使用与Google平台不同的帐户再次登录。

Disconnect

断开

Your app should provide a way to delete an existing user and close the account associated permanently.

您的应用程序应提供一种删除现有用户并永久关闭关联帐户的方法。

在Xamarin.Android中集成Google登录 (Integrate Google Sign-In in Xamarin.Android)

Create a new Xamarin.Android project in Visual Studio. Configure the new project by selecting the Blank template.

在Visual Studio中创建一个新的Xamarin.Android项目。 通过选择空白模板来配置新项目。

Integrate the Google Identity platform through configuring the Google API Console project.

通过配置Google API控制台项目来集成Google Identity Platform。

Go to the Configure Project section and click on the button so that a dialog appears and prompts to add a project. To add your project to Google API console, the app’s package name and SHA-1 signing certificate will be required. App’s package name can be found in Visual Studio, under the Android solution inside the AndroidManifest.xml file and manifest tag the following line-

转到“配置项目”部分,然后单击按钮,这样会出现一个对话框,提示您添加项目。 要将您的项目添加到Google API控制台,则需要该应用的程序包名称和SHA-1签名证书。 可以在Visual Studio的AndroidManifest.xml文件中的Android解决方案下找到应用程序的程序包名称,并在以下行中添加manifest标签:

package="com.companyname.project_name"

密钥库签名 (Keystore Signature)

Xamarin.Android signs all debug builds of the app with a debug. keystore file. When Xamarin.Android is installed for the first time, a default .keystore file is generated at the location

Xamarin.Android会通过调试对应用程序的所有调试版本进行签名。 密钥库文件。 首次安装Xamarin.Android时,会在该位置生成默认的.keystore文件

C:\Users\USERNAME\AppData\Local\Xamarin\Mono for Android\debug.keystore

C:\ Users \ USERNAME \ AppData \ Local \ Xamarin \ Mono for Android \ debug.keystore

Add this to the path variable as an environment variable so that keytool.exe command can be recognized on the command line and can be used to issue a signing certificate.

将此作为环境变量添加到path变量,以便可以在命令行上识别keytool.exe命令,并可以将其用于签发签名证书。

Debug and Release versions can be configured in the project properties. We will be working with the debug version for this app.

可以在项目属性中配置调试和发行版本。 我们将使用此应用程序的调试版本。

Now the SHA-1 signing certificate can be obtained by the executing the following command in cmd-

现在,可以通过在cmd-中执行以下命令来获取SHA-1签名证书

keytool.exe -list -v -keystore "%LocalAppData%\Xamarin\Mono for Android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

The output should look like this-

输出应如下所示:

Alias name: androiddebugkey
Creation date: Aug 19, 2014
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 53f3b126
Valid from: Tue Aug 19 13:18:46 PDT 2014 until: Sun Nov 15 12:18:46 PST 2043
Certificate fingerprints:MD5:  27:78:7C:31:64:C2:79:C6:ED:E5:80:51:33:9C:03:57SHA1: 00:E5:8B:DA:29:49:9D:FC:1D:DA:E7:EE:EE:1A:8A:C7:85:E7:31:23SHA256: 21:0D:73:90:1D:D6:3D:AB:4C:80:4E:C4:A9:CB:97:FF:34:DD:B4:42:FC:
08:13:E0:49:51:65:A6:7C:7C:90:45Signature algorithm name: SHA1withRSAVersion: 3

Copy and paste the SHA1 value as the required field in the Configure Project dialog and the project is set up to use Google Sign-In platform after the following step.

在“配置项目”对话框中,将SHA1值复制并粘贴为必填字段,然后在执行以下步骤后将项目设置为使用Google登录平台。

Get backend server’s OAuth 2.0 client ID

获取后端服务器的OAuth 2.0客户端ID

To authenticate a user, we need a backend service to access Google API. Firebase will be used for this purpose as an interface between our application and Google API for sign in to help easily manage and store a user’s unique id and other details such as email address.

要验证用户身份,我们需要后端服务才能访问Google API。 为此,将Firebase用作我们的应用程序和Google API之间的接口,以进行登录,以帮助轻松管理和存储用户的唯一ID和其他详细信息(例如电子邮件地址)。

  1. Open the Credentials page in the API Console.

    在API控制台中打开“ 凭据”页面 。

  2. The Web application type client ID is your backend server’s OAuth 2.0 client ID.

    Web应用程序类型的客户端ID是您的后端服务器的OAuth 2.0客户端ID。

  3. Paste the ID in strings.xml file将ID粘贴在strings.xml文件中
<string name="server_client_id">YOUR_SERVER_CLIENT_ID</string>

Add Firebase to Xamarin.Android Project

将Firebase添加到Xamarin.Android项目

Go to Console and Add your project to the Firebase Console. Download the latest google-services.json file located under project settings and the application we just added. Download this file and copy and paste it into the root folder for the solution and perform a clean and rebuild. Close Visual Studio and Load the project again to allow the changes to take place. Google Firebase is ready to be integrated into our app.

转到控制台,然后将您的项目添加到Firebase控制台。 下载位于项目设置和我们刚刚添加的应用程序下的最新google-services.json文件。 下载此文件,然后将其复制并粘贴到解决方案的根文件夹中,然后执行清理和重建。 关闭Visual Studio并再次加载项目以允许进行更改。 Google Firebase已准备好集成到我们的应用程序中。

Install the Xamarin and Android support libraries

安装Xamarin和Android支持库

Using the NuGet PM>

使用NuGet PM>

Install-Package Xamarin.Essentials -Version 1.5.3.2Install-Package Xamarin.Build.Download -Version 0.10.0Install-Package Xamarin.Android.Support.Vector.Drawable -Version 28.0.0.3Install-Package Xamarin.Android.Support.v4 -Version 28.0.0.3Install-Package Xamarin.Android.Support.v7.AppCompat -Version 28.0.0.3Install-Package Xamarin.Android.Support.Core.UI -Version 28.0.0.3Install-Package Xamarin.Android.Support.Core.Utils -Version 28.0.0.3Install-Package Xamarin.Android.Support.Compat -Version 28.0.0.3Install-Package Xamarin.Android.Arch.Lifecycle.Runtime -Version 1.1.1.3Install-Package Xamarin.Android.Arch.Lifecycle.Common -Version 1.1.1.3

Install Google Play Services and Firebase Service

安装Google Play服务和Firebase服务

Using the NuGet PM>

使用NuGet PM>

Install-Package FirebaseAuth -Version 2.0.6Install-Package Google.Apis -Version 1.46.0Install-Package Google.Apis.Auth -Version 1.46.0Install-Package Xamarin.GooglePlayServices.Auth.Api.Phone -Version 117.4.0-preview01Install-Package Xamarin.GooglePlayServices.Auth.Base -Version 117.1.0-preview01Install-Package Xamarin.GooglePlayServices.Basement -Version 117.2.1-preview01Install-Package Xamarin.GooglePlayServices.Plus -Version 117.0.0-preview03Install-Package Xamarin.GooglePlayServices.Tasks -Version 117.0.2-preview01Install-Package Xamarin.GooglePlayServices.Auth -Version 118.0.0-preview01

Enable the Google Sign-In method for the Firebase project on your console under the Authentication>Sign-In Methods option.

在“身份验证”>“登录方法”选项下,在控制台上为Firebase项目启用Google登录方法。

创建一个最小的用户界面 (Create a minimal user interface)

Add the following code to the activity_main.xml file

将以下代码添加到activity_main.xml文件中

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/blue_grey_700"android:orientation="vertical"tools:context=".MainActivity"><ProgressBarandroid:id="@+id/progress_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:visibility="invisible"style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"/><ImageViewandroid:id="@+id/google_icon"android:layout_width="48dp"android:layout_height="48dp"android:layout_marginBottom="10dp"android:layout_gravity="center_horizontal"android:layout_marginTop="@dimen/g_top_margin"android:contentDescription="@string/desc_google_icon"android:src="@drawable/userdev"/><TextViewandroid:id="@+id/title_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:layout_gravity="center_horizontal"android:text="@string/title_text"android:gravity="center_horizontal"android:textColor="@android:color/white"android:textSize="36sp" /><TextViewandroid:id="@+id/status"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/signed_out"android:textColor="@android:color/white"android:textSize="@dimen/abc_text_size_small_material"android:layout_gravity="center_horizontal"/><com.google.android.gms.common.SignInButtonandroid:id="@+id/sign_in_button"android:layout_gravity="center_horizontal"android:layout_width="250dp"android:layout_height="wrap_content"/><LinearLayoutandroid:id="@+id/sign_out_and_disconnect"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:layout_gravity="center_horizontal"android:visibility="gone"tools:visibility="visible"><Buttonandroid:id="@+id/sign_out_button"android:layout_width="250dp"android:layout_height="wrap_content"android:text="@string/sign_out"android:textColor="@android:color/white"android:theme="@style/ThemeOverlay.MyDarkButton" /><Buttonandroid:id="@+id/disconnect_button"android:layout_width="250dp"android:layout_height="wrap_content"android:text="@string/disconnect"android:textColor="@android:color/white"android:theme="@style/ThemeOverlay.MyDarkButton" /></LinearLayout></LinearLayout>

Understanding the flow

了解流程

Create a class which supplies an instance of the result returned by the GoogleSignInResult to the Activity

创建一个类,该类将GoogleSignInResult返回的结果的实例提供给Activity

public class SignInResultCallback : Object, IResultCallback {  public MainActivity Activity { get; set; }   public void OnResult(Object result)  {   var googleSignInResult = result as GoogleSignInResult;   Activity.HideProgressDialog();   Activity.HandleSignInResult(googleSignInResult);  } }

Create another class that communicates with the Activity to update the UI after a user has signed out to reset the flow.

在用户注销以重置流程之后,创建另一个与Activity通信的类以更新UI。

public class SignOutResultCallback : Object, IResultCallback {  public MainActivity Activity { get; set; }   public void OnResult(Object result)  {   Activity.UpdateUI(false);  } }

Inside MainActivity.cs file, the MainActivity class must inherit and implement the following class and interfaces

MainActivity.cs文件中,MainActivity类必须继承并实现以下类和接口

public class MainActivity: AppCompatActivity, View.IOnClickListener, GoogleApiClient.IOnConnectionFailedListener

Inside MainActivity, create a method to allow users to gain access to the app with Sign-In which responds to the button clicks.

在MainActivity内部,创建一种方法,该方法允许用户使用登录功能来响应对按钮的单击,从而访问该应用程序。

public void OnClick(View v){switch (v.Id){case Resource.Id.sign_in_button:SignIn();break;case Resource.Id.sign_out_button:SignOut();break;case Resource.Id.disconnect_button:RevokeAccess();break;}}

The Sign-Out and Disconnect buttons won’t be visible to the user until they sign in.

在用户登录之前,“注销”和“断开连接”按钮对用户不可见。

Create a SignIn method which starts the Sign-In flow

创建一个SignIn方法以启动登录流程

void SignIn(){var signInIntent = Auth.GoogleSignInApi.GetSignInIntent(mGoogleApiClient);StartActivityForResult(signInIntent, RC_SIGN_IN);}

The same has to be done for the other two choices to complete the flow.

对于其他两个选择,必须完成相同的操作才能完成流程。

void SignOut(){Auth.GoogleSignInApi.SignOut(mGoogleApiClient).SetResultCallback(new SignOutResultCallback { Activity = this });}
void RevokeAccess(){Auth.GoogleSignInApi.RevokeAccess(mGoogleApiClient).SetResultCallback(new SignOutResultCallback { Activity = this });}

Add the remaining code to the MainActivity class to handle the flow which allows GoogleSignInOptions to accept user account options and build a GoogleApiClient with the options specified which communicates with GoogleSignInApi, and then finally supply GoogleSignInResult instance to the appropriate Handler.

将剩余的代码添加到MainActivity类中,以处理允许GoogleSignInOptions接受用户帐户选项并使用指定的选项构建与GoogleSignInApi进行通信的GoogleApiClient的流程,最后将GoogleSignInResult实例提供给适当的处理程序。

[Activity(MainLauncher = true, Theme = "@style/ThemeOverlay.MyNoTitleActivity")]public class MainActivity : AppCompatActivity, View.IOnClickListener, GoogleApiClient.IOnConnectionFailedListener{const string TAG = "MainActivity";const int RC_SIGN_IN = 9001;GoogleApiClient mGoogleApiClient;TextView mStatusTextView;//ProgressDialog mProgressDialog;ProgressBar mProgressBar;protected override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);SetContentView(Resource.Layout.activity_main);mStatusTextView = FindViewById<TextView>(Resource.Id.status);mProgressBar = FindViewById<ProgressBar>(Resource.Id.progress_bar);FindViewById(Resource.Id.sign_in_button).SetOnClickListener(this);FindViewById(Resource.Id.sign_out_button).SetOnClickListener(this);FindViewById(Resource.Id.disconnect_button).SetOnClickListener(this);// [START configure_signin]// Configure sign-in to request the user's ID, email address, and basic// profile. ID and basic profile are included in DEFAULT_SIGN_IN.GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn).RequestEmail().Build();// [END configure_signin]// [START build_client]// Build a GoogleApiClient with access to the Google Sign-In API and the// options specified by gso.mGoogleApiClient = new GoogleApiClient.Builder(this).EnableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */).AddApi(Auth.GOOGLE_SIGN_IN_API, gso).Build();// [END build_client]// [START customize_button]// Set the dimensions of the sign-in button.var signInButton = FindViewById<SignInButton>(Resource.Id.sign_in_button);signInButton.SetSize(SignInButton.SizeStandard);// [END customize_button]}protected override void OnStart(){base.OnStart();var opr = Auth.GoogleSignInApi.SilentSignIn(mGoogleApiClient);if (opr.IsDone){// If the user's cached credentials are valid, the OptionalPendingResult will be "done"// and the GoogleSignInResult will be available instantly.Log.Debug(TAG, "Got cached sign-in");var result = opr.Get() as GoogleSignInResult;HandleSignInResult(result);}else{// If the user has not previously signed in on this device or the sign-in has expired,// this asynchronous branch will attempt to sign in the user silently.  Cross-device// single sign-on will occur in this branch.ShowProgressBar();opr.SetResultCallback(new SignInResultCallback { Activity = this });}}protected override void OnResume(){base.OnResume();HideProgressBar();}protected override void OnActivityResult(int requestCode, Result resultCode, Intent data){base.OnActivityResult(requestCode, resultCode, data);Log.Debug(TAG, "onActivityResult:" + requestCode + ":" + resultCode + ":" + data);// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);if (requestCode == RC_SIGN_IN){var result = Auth.GoogleSignInApi.GetSignInResultFromIntent(data);HandleSignInResult(result);}}public void HandleSignInResult(GoogleSignInResult result){Log.Debug(TAG, "handleSignInResult:" + result.IsSuccess);if (result.IsSuccess){// Signed in successfully, show authenticated UI.var acct = result.SignInAccount;mStatusTextView.Text = string.Format(GetString(Resource.String.signed_in_fmt), acct.DisplayName);UpdateUI(true);}else{// Signed out, show unauthenticated UI.UpdateUI(false);}}public void OnConnectionFailed(ConnectionResult result){// An unresolvable error has occurred and Google APIs (including Sign-In) will not// be available.Log.Debug(TAG, "onConnectionFailed:" + result);}protected override void OnStop(){base.OnStop();mGoogleApiClient.Disconnect();}public void ShowProgressBar(){if(mProgressBar == null){mProgressBar = new ProgressBar(this);mProgressBar.Visibility = ViewStates.Visible;mProgressBar.Indeterminate = true;}}public void HideProgressBar(){if (mProgressBar != null && mProgressBar.IsShown){mProgressBar.Visibility = ViewStates.Invisible;}}public void UpdateUI(bool isSignedIn){if (isSignedIn){FindViewById(Resource.Id.sign_in_button).Visibility = ViewStates.Gone;FindViewById(Resource.Id.sign_out_and_disconnect).Visibility = ViewStates.Visible;}else{mStatusTextView.Text = GetString(Resource.String.signed_out);FindViewById(Resource.Id.sign_in_button).Visibility = ViewStates.Visible;FindViewById(Resource.Id.sign_out_and_disconnect).Visibility = ViewStates.Gone;}}}

启动您的应用 (Launch Your App)

Build your solution and launch your app on an emulator available with the Android Device Manager or you can download and configure one, or you can simply launch your app in debugging mode on a physical device by enabling USB Debugging. The results should look like the image below.

在Android设备管理器提供的仿真器上构建解决方案并启动您的应用程序,或者您可以下载并配置一个应用程序,也可以通过启用USB调试在物理设备上以调试模式简单地启动应用程序。 结果应如下图所示。

If the user is using the app for the first time, Google Sign-In will prompt the user to enter email id and password for their associated Google account with which the user wishes to continue using the app.

如果用户是首次使用该应用程序,则Google登录会提示用户输入其关联的Google帐户的电子邮件ID和密码,该用户希望继续使用该帐户。

Once the Sign-In process is complete, depending upon your business logic further functionality can be added to the app to follow the Sign-In screen and provide the option to Sign-Out from the app.

登录过程完成后,根据您的业务逻辑,可以向应用程序添加更多功能,以遵循“登录”屏幕并提供从应用程序注销的选项。

翻译自: https://medium.com/swlh/authenticate-users-with-google-sign-in-oauth-2-0-in-xamarin-android-f7a4ffd5997d


http://www.taodudu.cc/news/show-5313608.html

相关文章:

  • PHP使用谷歌令牌做登录验证
  • 使用 Vue 3 和 Firebase 进行身份验证
  • GoogleAuthenticator(或身份宝)
  • LabVIEW开发软件著作权申请1-写在前面(相关问题解答)
  • 使用AccessibilityService带你自动安装软件以及自动添加微信好友
  • 雅可比矩阵几何意义的直观解释及应用
  • 雅可比(Jacobi)迭代法解线性方程组的Matlab实现
  • 软考中级证书有用吗?
  • 本科计算机专业软考证书,我有1本软考证书,但不知有什么用
  • 软考证书对找工作有没有帮助?肺腑之言
  • 计算机软考的价值,软考是否有用?软考证书的价值有多大?为...
  • 软考证书含金量高吗?看完你就明白了
  • 软考中级有用吗
  • 计算机软考通过 单位不聘用,软考证书是不是得聘用才有用呢?
  • 2023年中级计算机软考怎么报考呢?软考证书有用吗?启程别
  • 全国计算机软考中级证书的含金量,软考证书有用吗?哪个含金量高?2019改变人生的攻略请查收!...
  • Derivation of the mathematical formula of gradient descent
  • (通过简单直观的推导理解卡尔曼基础)Understanding the Basis of the Kalman Filter Via a Simple and Intuitive Derivation
  • C++模板编程(16)---继承与类模板(Derivation and Class Templates)
  • 论文解读《Structured Pruning for Deep Neural Networks with Adaptive Pruning Rate Derivation Based on Con》
  • 【强化学习】Bellman Equation Derivation (贝尔曼方程的推导)
  • DL中的Bias Variance
  • arm64 虚拟机安装
  • arm64 ubuntu主机安装chromium和chromedriver
  • Arm64 和 AArch64 的区别
  • arm64与aarch64
  • 搭建arm64的qemu环境
  • ARM64架构简介
  • 免费的量化交易软件的交易策略?
  • 全自动量化交易软件的使用程序?

使用Xamarin.Android中的Google登录OAuth 2.0对用户进行身份验证相关推荐

  1. 如何在React Native和Firebase中设置Google登录

    Google sign-in is a great login feature to offer to your app's users. It makes it easier for them to ...

  2. 在 Android 中使用 Google Play 游戏服务登录出现12501 报错

    在 Android 中使用 Google Play 游戏服务进行登录出现12501报错 添加Google Play服务 配置Google API控制台项目 配置AndroidManifest.xml ...

  3. 在PHP中创建Google登录页面

    在本文中,我将解释如何在您的PHP网站中集成Google登录. 我们将使用Google OAuth API,这是一种将Google登录名添加到您的网站的简便而强大的方法. 作为Web用户,您可能已经经 ...

  4. 谷歌账号登录Google API Oauth 2.0简单申请和使用教程

    在点击编辑,修改回调URL 编辑完后可以参照google开发文档开发 https://developers.google.com/accounts/docs/OAuth2?hl=zh-CN 然后按照需 ...

  5. cocos2d-x 2.X for Android中需要使用OpenGL ES 2.0

    cocos2d-x 2.X for Android中需要使用OpenGL ES 2.0 到了2.X版本中,cocos2d-x for Android已经不再支持(或者说放弃支持)opengl es 1 ...

  6. 在 Kubernetes 中使用 Keycloak OIDC Provider 对用户进行身份验证

    API Server 作为 Kubernetes 的网关,是用户访问和管理资源对象的入口.对于每个访问请求, API Server 都需要对访问者的合法性进行检查,包括身份验证.权限验证等等.Kube ...

  7. java实现 mysql 身份认证,java-从Filter中的数据库对用户进行身份验证是一种好习惯吗?...

    我正在为Android App创建Rest API(Spring Boot项目).从数据库对用户进行身份验证的理想方法应该是什么? 1.在控制器类中查询数据库 2.在过滤器类中查询数据库 3.使用Sp ...

  8. Android中使用Google 地图

    第一步:建一个包含Google APIs的工程 第二步:获取Android Maps API 金钥 第三步:载入MapView 第四步:通过MapController控制地图缩放与移动 获取密钥的方法 ...

  9. android中按一个按钮弹出字,允许用户在Android中长按一次即可编辑按钮文字

    我想允许App用户在Android中更改Button文本. 当用户单击按钮时,它应该执行某些操作,但是当他/她长按按钮时,将弹出一个编辑文本,并且无论用户键入什么内容都应另存为按钮文本. 到目前为止, ...

最新文章

  1. 为什么说Netty是性能之王,因为它用了 Reactor 模型啊
  2. 深入剖析HADOOP程序日志
  3. 大学基础课程之重要性
  4. django中csrftoken跨站请求伪造的几种方式
  5. 《我的十年图像生涯》—王郑耀(西安交通大学)
  6. 2020年9月25日-01-项目启动(团队分工)+带宽,网络速度的计算
  7. 升级bios_华硕400系主板升级BIOS:静待11代酷睿CPU
  8. 南京航空航天大学计算机网课,南京航空航天大学课程教学大纲-南京航空航天大学计算机科学与技术(9页)-原创力文档...
  9. c combobox绑定mysql数据库_C# ComboBox:组合框控件数据绑定
  10. 查看nginx版本_2:快速搭建Nginx
  11. Web 渗透之信息收集
  12. 读《About Face 4 交互设计精髓》7
  13. android 自动跳转市场,js判断设备,跳转app应用、android市场或者AppStore
  14. esxi能直通的显卡型号_最便宜能高画质“吃鸡”的显卡是这个型号:RX470矿卡!...
  15. 拉普拉斯变换 性质 及常用函数变换
  16. 3D打印切片软件Cura及CuraEngine原理分析
  17. dell 730xd硬raid配置
  18. 中国量化在AI全球盛会上的惊艳亮相
  19. VMware Workstation中安装Windows10系统
  20. VLink的简单验证过程

热门文章

  1. 20160329中艺收盘总结
  2. JAVA版都市沥青GT,育碧著名赛车游戏《都市沥青路GT》随 NDS 首发
  3. 项目管理到底管的是什么?
  4. ADXL345加速度传感器驱动
  5. 城市规划GIS技术应用指南(CH10)
  6. 京东sign 算法app
  7. 用python函数画德国国旗代码_用python画个五星红旗
  8. 基于位置服务的信息推送系统设计
  9. linux下获取本机IPv6地址、前缀、网关
  10. 7X24高可用保障,火山引擎边缘函数为猿辅导在线教学业务保驾护航