میتوانید با ادغام «ورود به سیستم OAuth عمومی» مبتنی بر وب در برنامهتان بااستفاده از «کیت توسعه نرمافزار Firebase»، به کاربران اجازه دهید بااستفاده از ارائهدهندگان OAuth مثل Microsoft Azure Active Directory با Firebase اصالتسنجی کنند تا جریان ورود به سیستم سرتاسری را انجام دهند.
قبل از شروع
برای ورود به سیستم کاربران بااستفاده از حسابهای Microsoft (حسابهای Azure Active Directory و شخصی Microsoft)، ابتدا باید Microsoft را بهعنوان ارائهدهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
- Firebase را به پروژه Apple خود اضافه کنید.
- در کنسول Firebase، به امنیت > اصالتسنجی بروید.
- در زبانه روش ورود به سیستم، ارائهدهنده ورود به سیستم Microsoft را فعال کنید.
-
شناسه کارخواه و رمز کارخواه را از کنسول توسعهدهنده آن ارائهدهنده به پیکربندی ارائهدهنده اضافه کنید:
- برای ثبت کارخواه Microsoft OAuth، دستورالعملهای شروع سریع: ثبت برنامه با نقطه پایان Azure Active Directory v2.0 را دنبال کنید. توجه داشته باشید که این نقطه پایانی از ورود به سیستم بااستفاده از حسابهای شخصی Microsoft و همچنین حسابهای Azure Active Directory پشتیبانی میکند. درباره Azure Active Directory v2.0 بیشتر بدانید.
-
هنگام ثبت برنامهها با این ارائهدهندگان، حتماً
دامنه
*.firebaseapp.comرا برای پروژه خود بهعنوان دامنه هدایت مجدد برای برنامه خود ثبت کنید.
- روی ذخیره کردن کلیک کنید.
مدیریت جریان ورود به سیستم با «کیت توسعه نرمافزار Firebase»
برای مدیریت جریان ورود به سیستم با «کیت توسعه نرمافزار پلاتفرمهای Firebase Apple»، این مراحل را دنبال کنید:
طرحهای نشانی وب سفارشی را به پروژه Xcode خود اضافه کنید:
- پیکربندی پروژه را باز کنید: روی نام پروژه در نمای درختی سمت راست دوکلیک کنید. برنامهتان را از بخش هدفها انتخاب کنید، سپس برگه اطلاعات را انتخاب کنید و بخش انواع نشانی وب را ازهم باز کنید.
-
روی دکمه + کلیک کنید و «شناسه برنامه کدبندیشده» خود را بهعنوان طرح نشانی وب اضافه کنید.
بقیه فیلدها را خالی بگذارید.
میتوانید «شناسه برنامه کدبندیشده» را در کنسول Firebase پیدا کنید: به
تنظیمات > برگه کلی بروید، سپس به بخش برنامههای شما پیمایش کنید تا جزئیات مربوط به برنامه iOS خود را ببینید.وقتی تکمیل شد، پیکربندی شما باید چیزی شبیه به موارد زیر باشد (اما با مقادیر ویژه برنامه شما):
بااستفاده از شناسه ارائهدهنده microsoft.com، نمونهای از OAuthProvider ایجاد کنید.
Swift
var provider = OAuthProvider(providerID: "microsoft.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
اختیاری: پارامترهای سفارشی OAuth اضافی را که میخواهید با درخواست OAuth ارسال کنید مشخص کنید.
Swift
provider.customParameters = [ "prompt": "consent", "login_hint": "user@firstadd.onmicrosoft.com" ]
Objective-C
[provider setCustomParameters:@{@"prompt": @"consent", @"login_hint": @"user@firstadd.onmicrosoft.com"}];
برای پارامترهایی که Microsoft پشتیبانی میکند، به مستندات Microsoft OAuth مراجعه کنید. توجه داشته باشید که نمیتوانید پارامترهای الزامی Firebase را با
setCustomParametersارسال کنید. این پارامترها عبارتاند از client_id، response_type، redirect_uri، state، scope، و response_mode.برای اینکه فقط کاربران یک مستأجر Azure AD خاص بتوانند به سیستم برنامه وارد شوند، میتوان از نام دامنه آشنای مستأجر Azure AD یا شناسه GUID مستأجر استفاده کرد. این کار را میتوانید با مشخص کردن فیلد «مستأجر» در شیء پارامترهای سفارشی انجام دهید.
Swift
provider.customParameters = [ // Optional "tenant" parameter in case you are using an Azure AD // tenant. eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or // 'contoso.onmicrosoft.com' or "common" for tenant-independent // tokens. The default value is "common". "tenant": "TENANT_ID" ]
Objective-C
// Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or // 'contoso.onmicrosoft.com' or "common" for tenant-independent tokens. // The default value is "common". provider.customParameters = @{@"tenant": @"TENANT_ID"};
اختیاری: دامنههای OAuth 2.0 اضافی را فراتر از نمایه پایه که میخواهید از ارائهدهنده اصالتسنجی درخواست کنید مشخص کنید.
Swift
provider.scopes = ["mail.read", "calendars.read"]
Objective-C
[provider setScopes:@[@"mail.read", @"calendars.read"]];
برای کسب اطلاعات بیشتر، به مستندات اجازهها و موافقت Microsoft مراجعه کنید.
اختیاری: اگر میخواهید نحوه نمایش
SFSafariViewControllerیاUIWebViewدر برنامهتان را هنگام نمایش reCAPTCHA به کاربر سفارشیسازی کنید، کلاس سفارشیای بسازید که با پروتکلAuthUIDelegateسازگار باشد و آن را بهcredentialWithUIDelegateارسال کنید.بااستفاده از شیء ارائهدهنده OAuth، با Firebase اصالتسنجی کنید.
Swift
// Replace nil with the custom class that conforms to AuthUIDelegate // you created in last step to use a customized web view. provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken } } }
Objective-C
[provider getCredentialWithUIDelegate:nil completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { if (error) { // Handle error. } if (credential) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { if (error) { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }]; } }];
بااستفاده از کد دسترسی OAuth، میتوانید Microsoft Graph API را فراخوانی کنید.
برای مثال، برای دریافت اطلاعات نمایه پایه، میتوانید با REST API تماس بگیرید و گذر دسترسی را در سرایند
Authorizationارسال کنید:https://graph.microsoft.com/v1.0/me
برخلاف ارائهدهندگان دیگری که «احراز هویت Firebase» پشتیبانی میکند، Microsoft نشانی وب عکس ارائه نمیدهد و درعوض، دادههای باینری عکس نمایه باید ازطریق Microsoft Graph API درخواست شود.
علاوهبر کد دسترسی OAuth، کد شناسایی کاربر OAuth نیز میتواند از شیء
OAuthCredentialبازیابی شود. ادعایsubدر کد شناسایی مختص برنامه است و با شناسه کاربر فدرال که توسط «احراز هویت Firebase» استفاده میشود و ازطریقuser.providerData[0].uidدردسترس است مطابقت نخواهد داشت. بهجای آن باید از فیلد ادعایoidاستفاده شود. هنگام استفاده از مستأجر Azure AD برای ورود به سیستم، ادعایoidمطابقت دقیق خواهد داشت. بااینحال، برای مورد غیرمستأجر، فیلدoidتکمیل میشود. برای شناسه فدرال4b2eabcdefghijkl،oidفرم00000000-0000-0000-4b2e-abcdefghijklرا خواهد داشت.اگرچه مثالهای بالا بر جریانهای ورود به سیستم تمرکز دارند، شما همچنین این امکان را دارید که بااستفاده از
linkWithCredentialارائهدهنده Microsoft را به کاربر موجود پیوند دهید. برای مثال، میتوانید چندین ارائهدهنده را به یک کاربر پیوند دهید و به او اجازه دهید با هرکدام از آنها وارد سیستم شود.Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // Microsoft credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // Microsoft credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }];
از همین الگو میتوان با
reauthenticateWithCredentialاستفاده کرد که میتوان از آن برای بازیابی اطلاعات اعتباری جدید برای عملیات حساس که نیاز به ورود به سیستم اخیر دارند استفاده کرد.Swift
Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }];
پساز اینکه کاربر برای اولینبار به سیستم وارد شد، حساب کاربری جدیدی ایجاد میشود و به اطلاعات اعتباری—یعنی نام کاربری و گذرواژه، شماره تلفن، یا اطلاعات ارائهدهنده اصالتسنجی—که کاربر با آن به سیستم وارد شده است پیوند داده میشود. این حساب جدید بهعنوان بخشی از پروژه Firebase شما ذخیره میشود و میتوان از آن برای شناسایی کاربر در همه برنامههای پروژه شما، صرفنظر از نحوه ورود کاربر به سیستم، استفاده کرد.
-
در برنامههایتان، میتوانید اطلاعات نمایه پایه کاربر را از
Userشیء دریافت کنید. به مدیریت کاربران مراجعه کنید. در Firebase Realtime Database و Cloud Storage قوانین امنیتی، میتوانید شناسه کاربر یکتای کاربر واردشده به سیستم را از متغیر
authدریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد استفاده کنید.
میتوانید به کاربران اجازه دهید با پیوند دادن اطلاعات اعتباری ارائهدهنده اصالتسنجی به حساب کاربری موجود بااستفاده از چندین ارائهدهنده اصالتسنجی به سیستم برنامهتان وارد شوند.
برای خارج کردن کاربر از سیستم،
signOut: را فراخوانی کنید.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
همچنین ممکن است بخواهید کد مدیریت خطا را برای طیف کامل خطاهای اصالتسنجی اضافه کنید. مدیریت خطاها را ببینید.