Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft graph api 如何在没有登录提示的情况下使用Microsoft graph API_Microsoft Graph Api_Microsoft Teams - Fatal编程技术网

Microsoft graph api 如何在没有登录提示的情况下使用Microsoft graph API

Microsoft graph api 如何在没有登录提示的情况下使用Microsoft graph API,microsoft-graph-api,microsoft-teams,Microsoft Graph Api,Microsoft Teams,我有一个自定义应用程序(桌面C#),当我按下按钮时,它会向Microsoft团队发送消息。问题是,每当我第一次运行该程序时,我都需要登录到我的Microsoft帐户 如何在没有提示的情况下发送/发布消息?(使用Microsoft Graph API) 这是我的密码: 私有静态字符串ClientId=“49414fb7-f415-4a84-bac8-XXXXX”; 私有静态字符串Tenant=“c7b6c891-cd42-41c4-8b44-XXXXX”; 公共静态IPublicClient应用程

我有一个自定义应用程序(桌面C#),当我按下按钮时,它会向Microsoft团队发送消息。问题是,每当我第一次运行该程序时,我都需要登录到我的Microsoft帐户

如何在没有提示的情况下发送/发布消息?(使用Microsoft Graph API)

这是我的密码:

私有静态字符串ClientId=“49414fb7-f415-4a84-bac8-XXXXX”; 私有静态字符串Tenant=“c7b6c891-cd42-41c4-8b44-XXXXX”; 公共静态IPublicClient应用程序PublicClientApp; 字符串[]_scopes=新字符串[]{“user.read”、“Group.ReadWrite.All”}; 私有异步无效按钮1\u单击(对象发送方,事件参数e) { PublicClientApp=PublicClientApplicationBuilder.Create(ClientId) .WithAuthority(AzureCloudInstance.AzurePublic,租户) .Build(); AuthenticationResult authResult=null; authResult=await PublicClientApp.AcquireTokenInteractive(_scopes.ExecuteAsync(); var accounts=await PublicClientApp.GetAccountsAsync(); var firstAccount=accounts.FirstOrDefault(); authResult=await PublicClientApp.AcquireTokenSilent(_作用域,firstAccount) .ExecuteAsync(); 如果(PublicClientApp==null) { MessageBox.Show(“空”); 返回; } if(string.IsNullOrEmpty(memoEdit1.Text.Trim()) { 返回; } IntegratedWindowsAuthenticationProvider authProvider=新的IntegratedWindowsAuthenticationProvider(PublicClientApp,null); GraphServiceClient graphClient=新的GraphServiceClient(authProvider); ChatMessage ChatMessage=新建ChatMessage(); chatMessage.Subject=null; chatMessage.Body=newitembody(); chatMessage.Body.ContentType=BodyType.Text; chatMessage.Body.Content=memoEdit1.Text; 等待图形客户端。团队[“2ae3bf3f-e84b-4996-975c-495318cXXXXX”]。通道[“19%3A63CF071A84B04F9AA38133A0E6XXXXX%40thread.skype”]。消息 .Request() .AddAsync(chatMessage); 备忘录编辑1.Text=“”; }


注意:我创建这个作为测试。至于制作,它需要每1小时自动发布一次消息,而无需用户操作

您必须首先登录,因为您已连接到grpah o代表用户。您可以像应用程序一样使用graph连接,您将在代码中连接clientID和AppSecret。
您在azure ad上的应用程序中有此信息,您必须首先登录,因为您已连接到grpah o用户。您可以像应用程序一样使用graph连接,您将在代码中连接clientID和AppSecret。 您在azure ad上的应用程序中有此信息。消息API不支持应用程序权限。唯一的选择是使用委派权限或授权。委托权限要求用户至少登录一次,然后才能使用

要使用Bot发送主动消息,请查看文档。

消息API不支持应用程序权限。唯一的选择是使用委派权限或授权。委托权限要求用户至少登录一次,然后才能使用


对于使用Bot发送主动消息,请查看文档。

为了实现我的目标,我硬编码了用户名和密码。如果有更好的答案,请毫不犹豫地贴出来

public partial class App
{
    static App()
    {
        _clientApp = PublicClientApplicationBuilder.Create(ClientId)
            .WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
            .Build();
    }        
    private static string ClientId = "XXX-XXX";
    private static string Tenant = "XXX-XXX";

    private static IPublicClientApplication _clientApp;

    public static IPublicClientApplication PublicClientApp { get { return _clientApp; } }
}


  private async void button5_Click(object sender, EventArgs e)
    {
        string[] scopes = new string[] { "Group.ReadWrite.All" };
        UsernamePasswordProvider authProvider = new UsernamePasswordProvider(App.PublicClientApp, scopes);
        GraphServiceClient graphClient = new GraphServiceClient(authProvider);
        String password = "XXXXX";
        System.Security.SecureString sec_pass = new System.Security.SecureString();
        Array.ForEach(password.ToArray(), sec_pass.AppendChar);
        sec_pass.MakeReadOnly();
        User me = await graphClient.Me.Request()
                        .WithUsernamePassword("XXX@XXXX.com", sec_pass)
                        .GetAsync();

        //Testing post
        ChatMessage chatMessage = new ChatMessage();
        chatMessage.Subject = null;
        chatMessage.Body = new ItemBody();
        chatMessage.Body.ContentType = BodyType.Text;
        chatMessage.Body.Content = "Hello World";
        await graphClient.Teams["xxxx"].Channels["19%XXXXXX%40thread.skype"].Messages
            .Request()
            .AddAsync(chatMessage);            
    }

为了实现我想要的,我硬编码了用户名和密码。如果有更好的答案,请毫不犹豫地贴出来

public partial class App
{
    static App()
    {
        _clientApp = PublicClientApplicationBuilder.Create(ClientId)
            .WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
            .Build();
    }        
    private static string ClientId = "XXX-XXX";
    private static string Tenant = "XXX-XXX";

    private static IPublicClientApplication _clientApp;

    public static IPublicClientApplication PublicClientApp { get { return _clientApp; } }
}


  private async void button5_Click(object sender, EventArgs e)
    {
        string[] scopes = new string[] { "Group.ReadWrite.All" };
        UsernamePasswordProvider authProvider = new UsernamePasswordProvider(App.PublicClientApp, scopes);
        GraphServiceClient graphClient = new GraphServiceClient(authProvider);
        String password = "XXXXX";
        System.Security.SecureString sec_pass = new System.Security.SecureString();
        Array.ForEach(password.ToArray(), sec_pass.AppendChar);
        sec_pass.MakeReadOnly();
        User me = await graphClient.Me.Request()
                        .WithUsernamePassword("XXX@XXXX.com", sec_pass)
                        .GetAsync();

        //Testing post
        ChatMessage chatMessage = new ChatMessage();
        chatMessage.Subject = null;
        chatMessage.Body = new ItemBody();
        chatMessage.Body.ContentType = BodyType.Text;
        chatMessage.Body.Content = "Hello World";
        await graphClient.Teams["xxxx"].Channels["19%XXXXXX%40thread.skype"].Messages
            .Request()
            .AddAsync(chatMessage);            
    }

如果你想在每1小时或在特定的时间表上向团队发布一些东西,请考虑一下。为什么你们不能使用flow来完成这个重复的任务?@RagavanRajan这是因为我需要将它集成到桌面应用程序中。申请表在哪里。因此,如果没有人来上课,它会通知老师或权威机构。第二个原因是,我不使用flow,因为如果你想在每1小时或特定的时间向团队发布一些东西,我找不到适合使用的触发器。为什么你们不能使用flow来完成这个重复的任务?@RagavanRajan这是因为我需要将它集成到桌面应用程序中。申请表在哪里。因此,如果没有人来上课,它会通知老师或权威机构。第二个原因是,我不使用flow,因为我找不到适合使用的触发器对不起,我不太明白你的意思。。你能给我一些代码吗?对不起,我不太明白你的意思。。你能给我一些代码吗?有没有一种方法让用户不用操作就可以登录?(在弹出窗口中输入用户名和密码)更像是在后端。感谢您告知有关主动预防的信息。我会尽量找到你可以看看博客。在使用密码授权之前,请看一下。我已经回答了。但我不知道这是否是一个最好的答案。有没有一种方法可以让用户不用操作就登录?(在弹出窗口中输入用户名和密码)更像是在后端。感谢您告知有关主动预防的信息。我会尽量找到你可以看看博客。在使用密码授权之前,请看一下。我已经回答了。但我不知道这是否是一个最佳答案。您是否考虑过使用基于证书的登录(与Azure AD应用程序关联的登录)?嘿,您能告诉我哪个依赖项包含
UsernamePasswordProvider
类吗?我似乎在Java的默认
msal4j
库中找不到它。您考虑过使用基于证书的登录(与Azure AD应用程序关联的登录)吗?嘿,您能告诉我哪个依赖项包含
UsernamePasswordProvider
类吗?我似乎在默认的
msal4j
Java库中找不到它。