You are on page 1of 13

ASP.

NET
Accueil Obtenir commenc Apprendre Hbergement Tlchargements Communaut Forums Aide

Crer une application de web ASP.NET MVC 5


scurise avec log in, email de confirmation et le mot
de passe de rinitialisation (c#)
Par Rick Anderson | mise jour le 26 mars 2015
1298 de 1458 personnes ont trouv cela utile

Ce didacticiel vous montre comment construire une application de web dASP.NET MVC 5 avec confirmation par email et mot de passe
rinitialiser en utilisant le systme dappartenance identit ASP.NET. Vous pouvez tlcharger la demande remplie ici
(http://code.msdn.microsoft.com/MVC-5-with-2FA-email-8f26d952) . Le tlchargement contient des assistants dbogage qui vous
permettent de tester la confirmation par e-mail et SMS sans mise en place dun e-mail ou le fournisseur SMS.

Ce tutoriel a t crit par Rick Anderson (http://blogs.msdn.com/rickAndy) (Twitter: @RickAndMSFT (https://twitter.com/RickAndMSFT)


).

Crez une application ASP.NET MVC (#createMvc)


Brancher SendGrid (#SG)
Exiger une confirmation de courriel avant, connectez-vous (#require)
Rcupration/rinitialisation de mot de passe (#reset)
Lien de confirmation email renvoyer (#rsend)
Combiner les comptes de connexion sociale et locale (#combine)
Dboguer lapplication (#dbg)
Ressources supplmentaires (#addRes)

Crez une application ASP.NET MVC


Commencez par linstallation et lexcution de Visual Studio Express 2013 pour le Web (http://go.microsoft.com/fwlink/?LinkId=299058) ou Visual
Studio 2013 (http://go.microsoft.com/fwlink/?LinkId=306566) . Installez Visual Studio 2013 mise jour 3 (http://go.microsoft.com/fwlink
/?LinkId=390465) ou suprieur.

AVERTISSEMENT: Vous devez installer Visual Studio 2013 Update 3 (http://go.microsoft.com/fwlink/?LinkId=390465) ou suprieur pour
effectuer ce didactiel.

1. Crez un projet Web ASP.NET et slectionnez le modle MVC. Web Forms prend galement en charge lidentit ASP.NET, alors vous pouvez suivre
les mmes tapes dans une application de formulaires web.
2. Laissez lauthentification par dfaut Des comptes dutilisateurs individuels. Si vous souhaitez hberger lapplication dans Azure, laissez la case
cocher active. Plus tard dans le tutoriel, nous allons dployer sur Azure. Vous pouvez ouvrir un compte Azure gratuitement
(http://azure.microsoft.com/en-us/pricing/free-trial/?WT.mc_id=A261C142F) .

3. Dfinissez le projet pour utiliser SSL (/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on) .


4. Excuter lapplication, cliquez sur le lien sinscrire et inscrire un utilisateur. ce stade, la seule validation sur lemail est avec lattribut
[EmailAddress] (http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.emailaddressattribute(v=vs.110).aspx) .
5. Dans lExplorateur de serveurs, accdez aux Donnes Connections\DefaultConnection\Tables\AspNetUsers, clic droit et slectionnez ouvrir la
table dfinition.
Limage suivante montre le schma de AspNetUsers :

6. Faites un clic droit sur la table AspNetUsers , puis slectionnez Afficher les donnes de Table.

ce stade lemail na pas t confirm.


7. Cliquez sur la ligne et slectionnez Supprimer. Vous ajoutez cet e-mail nouveau ltape suivante et envoyer un email de confirmation.

Email de confirmation
Il est recommand de confirmer lemail dun nouvel enregistrement dutilisateur pour vrifier quils ne sont pas passer pour quelqu'un dautre
(autrement dit, ils nont pas enregistr avec email de quelqu'un dautre). Supposons que vous avez eu un forum de discussion, vous souhaiteriez afin
dempcher lenregistrement en tant que "joe@contoso.com" "bob@example.com" . Sans confirmation par e-mail, "joe@contoso.com" pouvaient
obtenir des courriels non dsirs de votre App. Supposons que Bob accidentellement enregistr comme "bib@example.com" et navait pas remarqu, il
ne serait pas capable dutiliser le mot de passe rcuprer car lapplication na pas son e-mail correcte. Email de confirmation prvoit quune protection
limite contre et ne fournit pas de protection de spammers dtermins, ils ont plusieurs alias de-mail de travail qu'ils peuvent utiliser pour sinscrire.

En gnral, vous souhaitez empcher les nouveaux utilisateurs de publier toutes les donnes de votre site web avant quils aient t confirmes par
courriel, un message texte SMS ou tout autre mcanisme. Dans les sections qui suivent, nous permettent demail de confirmation et modifier le code
afin dempcher les nouveaux utilisateurs enregistrs douvrir une session tant que leur e-mail a t confirme.

Brancher SendGrid
Bien que ce tutoriel montre seulement lajout de notification par e-mail via SendGrid (http://sendgrid.com/) , vous pouvez envoyer des e-mails laide
de SMTP et autres mcanismes (voir ressources supplmentaires (#addRes) ).

1. Dans la Console du gestionnaire de Package, tapez la commande suivante:


Install-Package SendGrid
2. Allez l' Azure SendGrid Inscrivez-vous page (http://go.microsoft.com/fwlink/?linkid=271033&clcid=0x409) et inscrivez-vous gratuitement
SendGrid compte. Ajoutez le code semblable au suivant pour configurer les SendGrid:

public class EmailService : IIdentityMessageService


{
public async Task SendAsync(IdentityMessage message)
{
await configSendGridasync(message);
}

// Use NuGet to install SendGrid (Basic C# client lib)


private async Task configSendGridasync(IdentityMessage message)
{
var myMessage = new SendGridMessage();
myMessage.AddTo(message.Destination);
myMessage.From = new System.Net.Mail.MailAddress(
"Joe@contoso.com", "Joe S.");
myMessage.Subject = message.Subject;
myMessage.Text = message.Body;
myMessage.Html = message.Body;

var credentials = new NetworkCredential(


ConfigurationManager.AppSettings["mailAccount"],
ConfigurationManager.AppSettings["mailPassword"]
);

// Create a Web transport for sending email.


var transportWeb = new Web(credentials);

// Send the email.


if (transportWeb != null)
{
await transportWeb.DeliverAsync(myMessage);
}
else
{
Trace.TraceError("Failed to create Web transport.");
await Task.FromResult(0);
}
}
}

Vous devrez ajouter que comprend ce qui suit:

using SendGrid;
using System.Net;
using System.Configuration;
using System.Diagnostics;

Pour simplifier cet exemple, nous stockerons les paramtres dapplication dans le fichier web.config :
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<!-- Markup removed for clarity. -->

<add key="mailAccount" value="xyz" />


<add key="mailPassword" value="password" />
</appSettings>
<system.web>

Remarque sur la scurit: Ne jamais stocker des donnes sensibles dans votre code source. Le compte et les informations
didentification sont stockes dans lappSetting. Sur Azure, vous pouvez solidement stocker ces valeurs dans longlet configurer
(http://blogs.msdn.com/b/webdev/archive/2014/06/04/queuebackgroundworkitem-to-reliably-schedule-and-run-long-background-process-
in-asp-net.aspx) dans le portail Azure. Voir mthodes conseilles pour le dploiement de mots de passe et autres donnes sensibles
ASP.NET et dAzur (/identity/overview/features-api/best-practices-for-deploying-passwords-and-other-sensitive-data-to-aspnet-
and-azure) .

Activez lemail de confirmation dans le contrleur de compte

//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);


var callbackUrl = Url.Action("ConfirmEmail", "Account",
new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id,
"Confirm your account", "Please confirm your account by clicking <a href=\""
+ callbackUrl + "\">here</a>");

return RedirectToAction("Index", "Home");


}
AddErrors(result);
}

// If we got this far, something failed, redisplay form


return View(model);
}

Vrifier que le fichier Views\Account\ConfirmEmail.cshtml possde la syntaxe razor correct. (Le @ caractre dans la premire ligne est peut-tre
manquant.)

@{
ViewBag.Title = "Confirm Email";
}

<h2>@ViewBag.Title.</h2>
<div>
<p>
Thank you for confirming your email. Please @Html.ActionLink("Click here to Log in", "Login", "Account",
routeValues: null, htmlAttributes: new { id = "loginLink" })
</p>
</div>

Excuter lapplication, puis cliquez sur le lien dinscription. Une fois que vous soumettez le formulaire dinscription, vous tes connect.

Vrifiez votre compte de messagerie et cliquez sur le lien pour confirmer votre e-mail.

Exiger une confirmation de courriel avant, connectez-vous


Actuellement, une fois quun utilisateur remplit le formulaire dinscription, ils sont connects. Gnralement, vous voulez confirmer leur email avant du
leur faire. Dans la section ci-dessous, nous allons modifier le code afin dexiger des nouveaux utilisateurs davoir un email de confirmation avant ils sont
connects (authentifis). Mis jour la mthode HttpPost Register le change en surbrillance suivant:

//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// Comment the following line to prevent log in until the user is confirmed.
// await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);


var callbackUrl = Url.Action("ConfirmEmail", "Account",
new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Confirm your account",
"Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

// Uncomment to debug locally


// TempData["ViewBagLink"] = callbackUrl;
ViewBag.Message = "Check your email and confirm your account, you must be confirmed "
+ "before you can log in.";

return View("Info");
//return RedirectToAction("Index", "Home");
}
AddErrors(result);
}

// If we got this far, something failed, redisplay form


return View(model);
}

En formulant des observations sur la mthode SignInAsync , lutilisateur ne sera pas sign lenregistrement. Le
TempData["ViewBagLink"] = callbackUrl;
ligne peut tre utilis pour dboguer lapplication (#dbg) et test denregistrement sans envoyer de courriel. ViewBag.Message est utilis pour afficher
les instructions de la confirmer. Le Tlchargez exemple (http://code.msdn.microsoft.com/MVC-5-with-2FA-email-8f26d952) contient le code pour tester
la confirmation par e-mail sans configurer e-mail et peut galement tre utilis pour dboguer lapplication.

Crez un fichier Views\Shared\Info.cshtml et ajoutez le balisage suivant de rasoir:

@{
ViewBag.Title = "Info";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>

Ajoutez l' attribut Authorize (http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.118).aspx) la mthode daction de


Contact du contrleur Home. Vous pouvez utiliser cliquer sur le lien Contact pour vrifier les utilisateurs anonymes nont pas accs et les utilisateurs
authentifis ont accs.

[Authorize]
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";

return View();
}

Vous devez galement mettre jour la mthode daction HttpPost Login :

//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}

// Require the user to have a confirmed email before they can log on.
var user = await UserManager.FindByNameAsync(model.Email);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
ViewBag.errorMessage = "You must have a confirmed email to log on.";
return View("Error");
}
}

// This doesn't count login failures towards account lockout


// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout:
false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}

Mise jour de laffichage de Views\Shared\Error.cshtml pour afficher le message derreur:

@model System.Web.Mvc.HandleErrorInfo

@{
ViewBag.Title = "Error";
}

<h1 class="text-danger">Error.</h1>
@{
if (String.IsNullOrEmpty(ViewBag.errorMessage))
{
<h2 class="text-danger">An error occurred while processing your request.</h2>
}
else
{
<h2 class="text-danger">@ViewBag.errorMessage</h2>
}
}

Supprimer tous les comptes dans la table AspNetUsers contient lalias de messagerie avec que vous souhaitez tester. Excuter lapplication et vrifiez
que vous ne pouvez pas vous connecter jusqu' ce que vous avez confirm votre adresse e-mail. Une fois que vous confirmez votre adresse de courriel,
cliquez sur le lien Contact .

Rcupration/rinitialisation de mot de passe


Supprimez les caractres de commentaire de la mthode daction HttpPost ForgotPassword dans le contrleur de compte:

//
// POST: /Account/ForgotPassword
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindByNameAsync(model.Email);
if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
{
// Don't reveal that the user does not exist or is not confirmed
return View("ForgotPasswordConfirmation");
}

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);


var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol:
Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\""
+ callbackUrl + "\">here</a>");
return RedirectToAction("ForgotPasswordConfirmation", "Account");
}

// If we got this far, something failed, redisplay form


return View(model);
}

Supprimez les caractres de commentaire de ForgotPassword ActionLink (http://msdn.microsoft.com/en-us/library


/system.web.mvc.html.linkextensions.actionlink(v=vs.118).aspx) dans le fichier de vue de rasoir de Views\Account\Login.cshtml :

@using MvcPWy.Models
@model LoginViewModel
@{
ViewBag.Title = "Log in";
}

<h2>@ViewBag.Title.</h2>
<div class="row">
<div class="col-md-8">
<section id="loginForm">
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new {
@class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Use a local account to log in.</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="checkbox">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Log in" class="btn btn-default" />
</div>
</div>
<p>
@Html.ActionLink("Register as a new user", "Register")
</p>
@* Enable this once you have account confirmation enabled for password reset functionality *@
<p>
@Html.ActionLink("Forgot your password?", "ForgotPassword")
</p>
}
</section>
</div>
<div class="col-md-4">
<section id="socialLoginForm">
@Html.Partial("_ExternalLoginsListPartial", new ExternalLoginListViewModel { ReturnUrl = ViewBag.ReturnUrl })
</section>
</div>
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

Le journal en page affiche maintenant un lien pour rinitialiser le mot de passe.

Lien de confirmation email renvoyer


Une fois quun utilisateur cre un nouveau compte local, ils sont envoys par courriel un lien de confirmation quils sont tenus dutiliser avant quils
peuvent se connecter. Si lutilisateur accidentellement supprime lemail de confirmation ou lemail narrive jamais, ils devront le lien de confirmation
envoy nouveau. Les changements de code suivants montrent comment activer cela.

Ajoutez la mthode suivante la fin du fichier Controllers\AccountController.cs :

private async Task<string> SendEmailConfirmationTokenAsync(string userID, string subject)


{
string code = await UserManager.GenerateEmailConfirmationTokenAsync(userID);
var callbackUrl = Url.Action("ConfirmEmail", "Account",
new { userId = userID, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(userID, subject,
"Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

return callbackUrl;
}

Mise jour de la mthode Register pour utiliser le nouveau programme dassistance:

//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// Comment the following line to prevent log in until the user is confirmed.
// await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

string callbackUrl = await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account");

ViewBag.Message = "Check your email and confirm your account, you must be confirmed "
+ "before you can log in.";

return View("Info");
//return RedirectToAction("Index", "Home");
}
AddErrors(result);
}

// If we got this far, something failed, redisplay form


return View(model);
}

Mettre jour la mthode Login pour renvoyer le mot de passe lorsque si le compte dutilisateur na pas t confirm:

//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}

// Require the user to have a confirmed email before they can log on.
// var user = await UserManager.FindByNameAsync(model.Email);
var user = UserManager.Find(model.Email, model.Password);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
string callbackUrl = await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account-Resend");

// Uncomment to debug locally


// ViewBag.Link = callbackUrl;
ViewBag.errorMessage = "You must have a confirmed email to log on. "
+ "The confirmation token has been resent to your email account.";
return View("Error");
}
}

// This doesn't count login failures towards account lockout


// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout:
false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}

Combiner les comptes de connexion sociale et locale


Vous pouvez combiner les comptes les et sociaux en cliquant sur votre lien par courriel. Dans lordre suivant RickAndMSFT@gmail.com est dabord
cr comme une connexion daccs locale, mais vous pouvez crer le compte comme un journal social dans tout dabord, puis ajoutez une connexion
daccs locale.
Cliquez sur le lien grer . Note le 0 externe (connexions sociales) associ ce compte.

Cliquez sur le lien dans un autre journal service et accepter les demandes dapp. Les deux comptes ont t combines, vous serez en mesure douvrir
une session avec un compte. Vous voudrez peut-tre vos utilisateurs pour ajouter les comptes locaux, dans le cas o leur journal social au service
dauthentification est en panne, ou plus probablement ils ont perdu laccs leur compte social.

Limage suivante, Tom est un journal social dans (dont vous pouvez le voir sur la Logins externes: 1 montr sur la page).
En cliquant sur choisir un mot de passe vous permet dajouter un journal local sur associ au mme compte.

Confirmation par courriel de faon plus approfondie


Mon tutoriel Confirmation de compte et de rcupration de mot de passe avec lidentit ASP.NET (/identity/overview/features-api/account-
confirmation-and-password-recovery-with-aspnet-identity) va dans cette rubrique avec plus de dtails.

Dbogage de lapplication
Si vous ne recevez pas un email contenant le lien:

Vrifiez votre dossier courrier indsirable ou spam.


Connectez-vous votre compte SendGrid et cliquez sur le lien de lactivit de courrier lectronique (https://sendgrid.com/logs/index) .
Pour tester le lien de vrification sans e-mail, Tlcharger le rempli dchantillon (http://code.msdn.microsoft.com/MVC-5-with-2FA-email-8f26d952) . Le
lien de confirmation et les codes de confirmation seront affichera sur la page.

Ressources supplmentaires
Liens vers lidentit ASP.NET ressources recommandes (/identity/overview/getting-started/aspnet-identity-recommended-resources)
Confirmation de compte et mot de passe rcupration avec lidentit ASP.NET (/identity/overview/features-api/account-confirmation-
and-password-recovery-with-aspnet-identity) Va dans les dtails sur confirmation mot de passe de rcupration et compte.

MVC 5 App avec Facebook, Twitter, LinkedIn et Google OAuth2 Sign-on (/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-
and-google-oauth2-and-openid-sign-on) Ce tutoriel vous montre comment crire une application ASP.NET MVC 5 avec autorisation de Facebook et
Google OAuth 2. Il montre galement comment ajouter des donnes supplmentaires la base de donnes de lidentit.
Dployer une application de scurit ASP.NET MVC avec adhsion, OAuth et base de donnes SQL Azure (http://www.windowsazure.com
/en-us/develop/net/tutorials/web-site-with-sql-database/) . Ce tutoriel ajoute Azure dploiement, comment scuriser votre application avec des
rles, comment utiliser les membres API pour ajouter des utilisateurs et des rles et des fonctions de scurit supplmentaires.
Cration dune application Google pour 2 OAuth et connecter lapplication au projet (/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-
facebook-and-google-oauth2-and-openid-sign-on#goog)

Cration de lapplication dans Facebook et connecter lapplication au projet (/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-


and-google-oauth2-and-openid-sign-on#fb)

Paramtrage de SSL dans le projet (/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on#ssl)

Cet article a t initialement cr le 15 aot 2014

Informations de lauteur

Rick Anderson Rick Anderson travaille comme programmeur rdacteur pour Microsoft, en se concentrant sur ASP.NET MVC,
Windows Azure et Entity Framework. Vous pouvez le suivre sur twitter via @RickAndMSFT.

Commentaires
(116)

Cette page est utile? Oui N

Ce site est gr pour Microsoft par Neudesic, LLC. | Microsoft 2016. Tous droits rservs.

You might also like