Auto authenticate users in Microsoft teams using Microsoft Bot Framework - c#

I am looking to see how I can integrate authentication to a bot using Azure AD. There is a nifty code Microsoft offered in this article about authentication with azure bot. What it does is offer a sign in option to users, they log in and authenticate by copy/pasting the 6 magic numbers back to the chat. I used AADv1 example to test it in Teams.
Here is the direct github link to the cs file where the GetTokenDialog is (line 95): github link
However I am having trouble finding a way that it automatically authenticates the user in Microsoft Teams since we use SSO within corporate network.
The picture in this link,Microsoft Teams bot picture, is from a Who bot that you can download to Teams and talk to it. It basically does the authentication automatically after the user initially clicks "Allow".
Is there a way to replicate this process?

I think this can inform you.
botframework on teams channel 1:1 Authentication AAD integrated
At this time it's can't possible to SSO your bot on teams channel but you can compare the tenantId of your AAD.
Note of response (Adrian Solis) : Currently, there's no way to get the user's AAD token automatically-- you have to get the user to go through a login experience (as described in the documentation links you posted above) to get an AAD id or access token.

Related

What's the difference between the Directline API and OAuth2 in Microsoft Bot Framework .Net?

I'm thinking of how to implement Authentication in my Bot Project. My Boss wants Directline API from Azure as our go-to but there is no useful documentation provided by the Microsoft team. Another authentication is OAuth2 from Azure. Are these two similar? I know they both provide an Authentication token. But I would like to hear any suggestions from you guys.
I need to embed my Bot to the React Web-App. My plan is to only use the Bot if the user is logged-in within the App. So if it does whenever the user type/send message to the Bot. I need to authenticate that request and so on.
The Direct Line service (along with other channel connectors) in the bot framework utilizes Oauth. The connector service lives (and handles communication) between the chat client and the bot (your code). This is related to authenticating and handling communication between these endpoints. The bot resource (bot channels registration or web app bot) actually is dependent on an Azure AAD application that gets created along with that resource (uses client secret, etc).
Additionally, user authentication can be done, and there are bot framework SDK samples on how to implement that (let me know if you need examples).
Samples:
Here is the main samples repo with readme.
Here are the .NET
(core) specific ones.
Here is a sample that shows user
authentication using OAuth. Remember this is different than client
(Teams or Slack application for example) or channel authentication.
This is regarding authenticating a user to the bot through OAuth. The
readme contains this link already, but make sure you read and follow
this article on how to add authentication.
Here is a sample
using OAuth but also has calls utilizing that, to make calls to
MSGraph.

Using Google.Cloud.Storage with user authentication

I am writing an application in C# which would run on a PC and allow a user to login to GCP and manage files there.
I looked at the sample codes on https://cloud.google.com/storage/docs/reference/libraries
The documents show how to use a service account for authentication, but I want to use user authentication.
In this way, if the user do not have permission to say delete data, the application can not do it. If I use a service account, which I don't want.
Is there any way that I use user authentication to log in to cloud storage services?
Is there any sample that I can use for this purpose?
Update 1
My main aim is to develop an application similar to gsutil but in C# and it should authenticate users similar to gsutils.
The same as gsutil, it would be used only by cloud admins who already have access to buckets via gsutils or cloud.google.com
Is the source code for gsutils published? How does it authenticate users?
What you might be wanted to use is this "User account credentials". This at the ends guides you to Firebase Authentication, which supports email and password authentication as well as federated sign in with identity providers such as Google, Facebook, Twitter, and GitHub.
You can sign in users to your Firebase app either by using FirebaseUI as a complete drop-in auth solution or by using the Firebase Authentication SDK to manually integrate one or several sign-in methods into your app. This will be up to your needs and how you want to build your app.

How to enable multiple AD authentication in BOT while using OAuthPrompt or which other mechanism can be used to enable multiple AD?

I want to enable multiple AD authentication using OAuth Prompt in my BOT that i have developed.Currently, there is only one connection that it is taking through which our project AD is getting hit and the credentials are validated. But, i want the same O-Auth prompt to work for different AD's at a time in the BOT which was created using MS Bot framework V4 SDK in C#.
To clearly explain my query, let me take and example and also let me tell you the steps i have followed for enabling the Authentication in my BOT:
MS Bot deployed to AZURE
In the setting of WebApp Bot created OAuth Connection setting with Name: OauthConnection by providing my AZURE AD client ID and secret during creation. Tested the connection it was successful.
In my BOT code, used OAuthPrompt method for enabling the authentication and to it passed the Connection name as "OauthConnection" which was created in STEP #2
Added this Prompt method to the Dialog stack
Now my Bot code when executed gives me sign in option where if i enter the required credentials, it gets validated against the AZURE AD using the connection name provided in the OAuth Prompt method where in turn the required client ID was given
Now if we observe, The credentials are validated against the AZURE AD of which the connection name was given
What I Want to achieve is:
How to make the OAuth Prompt method such that it supports Multiple ADs simultaneously at a time?
Meaning, if my AD uses the domain as #axct.com and another AD uses domain as #avabt.com currently the oauth prompt if configured using above steps either supports the authentication of AD which uses login as #axct.com or #avabt.com at any given point of time but not both at a time in parallel.
I want to enable it such that it uses both AD for authentication at any given time in parallel such that if i use
john.doe#axct.com and its password during login it should successfully authenticate and return the respective Token at the same time if I use john.john#avabt.com as login credentials with proper password it should still successfully authenticate and return me the Token such that i can retrieve the user name from using the returned token using graph API.
How to achieve this is my query or issue as i am not sure how to do it?
Similarly, how to enable for any given AD like social networking sites, google or any other credentials using single Oauth Prompt method.
Is this can be achieved using Oauth Prompt? If yes please explain in detailed guide step by step manner in solving this issue as i am new to BOT and coding
or this is wrong expectation we have to use another method and not Oauth prompt?
Please explain in detailed guide step by step manner in solving this issue as i am new to BOT and coding.
Language: C#
Bot SDK: V4
Thanks in Advance
Regards
-ChaitanyaNG
Expected Result: Enable multiple AD authentication at a any given point of time using OAuth prompt in BOT SDK V4 code done in C# such that it works in parallel
Actual Result: Only one AD authentication works
Update to the query: 14 Aug 2019 -
To make my query more easily understandable-
How to make/convert my BOT using OAuth Prompt for authentication such that it works as a multi-tenant SaaS application using Azure AD?
Please help me with this query or issue so that i can implement it in my BOT having Water Fall Dialog.
The sample bots are configured to only look for one connection string. This leaves you with two options:
1) you can configure your dialogs to branch based on user input of what type of domain they're going to be using. Then, based on the dialog, for example axctDialog.cs or avabtDialog.cs, an auth prompt could be created, and it would use the connection string you have for it in appsettings. This would mean, however, asking your users to select their domain before signing in, something they might find tedious and extraneous.
2) When you create your Azure AD application (what you created in order to create the connection string on the bot), you create it to be multi-tenant. Much simpler. If you've already created your AAD app, you can go into the app manifest and change the values. For example, signInAudience would need to be set to either AzureADMultipleOrgs or AzureADandPersonalMicrosoftAccount and the endpoint would be common instead of the tenant domain. More details about this can be read here.
Beside your Bot registration (Bot app id and app password), you must have a separate AAD app registered for your bot service.
If that's the case, just register your AAD app as multi tenant.
One thing to note, when you create the OAuth2 settings for this app in your Azure bot service registration (or channel registration), you need to set the "TenantId" setting to be "common" - this doesn't seem to be documented anywhere.
BTW if you just want to build relatively simple bots, check out my recent Github repo. It has built in generic code written to handle auth and token exchange for you and a lot more.

Where could I find some information about ADFS authetication for Microsoft Graph?

I did not found an answer for such specific question.
I have checked:
https://graph.microsoft.io/en-us/docs
I have also found the thread below, but it was not useful:
Microsoft Graph does not work with ADFS?
I would like to know how to get ADFS and Microsoft working together in a .NET MVC app. I did not found anything for that in https://graph.microsoft.io/en-us/code-samples-and-sdks
Thanks.
Per the other thread you reference - Office365/Azure AD can be federated with ADFS (using AD Connect or Azure AD PowerShell for example). Once this is in place, an app can use AAD to sign users in (using their corporate creds), and acquire access tokens to Microsoft Graph to access the signed-in user's cloud data (after consent is provided by the user).
We also support a preview of "hybrid deployments" which allows an app to be written once against Microsoft Graph, but can access a user's Outlook data whether the user's mailbox is hosted in Office365, outlook.com (personal email) or in an on-premises Exchange mailbox.
If this is the information you are looking for, please update your question to be more specific about your scenario, so that we can provide more help.

How to authenticate a user and get his acount details in UWP?

I am new to UWP and I am trying to make an app that includes sign in with Microsoft account. The problem is that I got very confused what API should I use and how to make the authentication.
After very long search I found that Microsoft have APIs and SDKs for everything - Outlook, OneDrive, Live, Office365, Microsoft Graph etc. But there is no clear documentation, what developer should use to authenticate a user and get his account details such as name and email.
It seems that the Live SDK could do the trick, but Microsoft state that this SDK is legacy and developers should use OndeDrive SDK. But OneDrive don't suit my needs, I can't get users email address and also I have to have developer account so I can build a sample app to test it. This is too much just for a test, isn't it?
After more research I found that Microsoft Graph could help, but it seems that it is only for business purposes or maybe I am wrong?
So in short what I try to achieve is making an app that let the user sign in with his Microsoft account. After successful authentication I need to get his account details so I can build him a profile in the app. And all of this I want to do it without having to make developer or business accounts.
Hope someone could help, becaouse the Microsoft documentation is very confusing.
Microsoft Graph does support the ability for you to sign in with a Microsoft Account, and then access the user's very basic profile and their personal consumer OneDrive and Outlook. Token acquisition is achieved through the new v2 endpoint (converged auth, that allows you to get a token for the signed in user, whether they are a consumer user through Microsoft Account or a commercial/business/school user through Azure AD).
I recommend taking a look at a couple of places. One place is https://graph.microsoft.io/en-us/docs/authorization/converged_auth and here on app registration and token acquisition: https://azure.microsoft.com/en-us/documentation/articles/active-directory-appmodel-v2-overview/ and here for get started for windows apps: https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-devquickstarts-wpf/. NOTE: This last one uses a preview/experimental client library.
Hope this helps,

Categories

Resources