{"id":4812,"date":"2024-04-29T10:20:45","date_gmt":"2024-04-29T02:20:45","guid":{"rendered":"https:\/\/liyue.name\/blog\/?p=4812"},"modified":"2026-02-08T03:01:04","modified_gmt":"2026-02-07T19:01:04","slug":"%e6%9f%a5%e8%af%a2%e5%9f%9f%e5%90%8d%e6%98%af%e5%90%a6%e5%9c%a8microsoft-365-%e7%bb%91%e5%ae%9a","status":"publish","type":"post","link":"https:\/\/liyue.name\/?p=4812","title":{"rendered":"\u67e5\u8be2\u57df\u540d\u662f\u5426\u5728Microsoft 365 \u7ed1\u5b9a"},"content":{"rendered":"\n<p>\u516c\u53f8\u57df\u540d\u5728\u5fae\u8f6f365\u5e73\u53f0\u8fc7\u53bb\u6709\u6ca1\u6709\u7ed1\u5b9a\uff1f<\/p>\n\n\n\n<p>\u8f93\u5165\u516c\u53f8\u57df\u540d\uff0c\u5373\u53ef\u67e5\u8be2\u4e2d\u56fd\u7248\u3001\u56fd\u9645\u7248\u57df\u540d\u7ed1\u5b9a\u72b6\u6001<\/p>\n\n\n\n<!--more-->\n\n\n\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Office 365 \u79df\u6237\u89e3\u6790\u5668<\/title>\n    <style>\n        body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; padding: 30px; background-color: #f4f7f9; }\n        .card { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); max-width: 600px; margin: auto; }\n        input[type=\"text\"] { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; }\n        input[type=\"button\"] { background-color: #0078d4; color: white; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; width: 100%; font-size: 16px; }\n        input[type=\"button\"]:hover { background-color: #005a9e; }\n        #result-container { margin-top: 20px; display: none; border-top: 1px solid #eee; padding-top: 15px; }\n        .info-item { margin-bottom: 10px; font-size: 14px; }\n        .label { color: #666; font-weight: bold; }\n        .value { color: #333; margin-left: 5px; word-break: break-all; }\n        .status-tag { display: inline-block; padding: 2px 8px; border-radius: 3px; font-weight: bold; margin-top: 5px; }\n        .intl { background-color: #d1ecf1; color: #0c5460; }\n        .china { background-color: #fff3cd; color: #856404; }\n        .error { color: #dc3545; }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"card\">\n    <h3>Microsoft 365 \u79df\u6237\u5c5e\u6027\u67e5\u8be2<\/h3>\n    \u8bf7\u8f93\u5165\u57df\u540d\uff1a<br \/>\n    <input type=\"text\" id=\"name\" placeholder=\"\u4f8b\u5982: contoso.com\">\n    <input type=\"button\" value=\"\u7acb\u5373\u67e5\u8be2\" id=\"submit\">\n\n    <div id=\"result-container\">\n        <div class=\"info-item\">\n            <span class=\"label\">\u7248\u672c\u72b6\u6001\uff1a<\/span>\n            <span id=\"version-status\" class=\"status-tag\"><\/span>\n        <\/div>\n        <div class=\"info-item\">\n            <span class=\"label\">\u5339\u914d\u57df\u540d\u503c\uff1a<\/span>\n            <span id=\"domain-value\" class=\"value\"><\/span>\n        <\/div>\n        <div class=\"info-item\">\n            <span class=\"label\">\u79df\u6237 ID\uff1a<\/span>\n            <span id=\"tenant-id\" class=\"value\" style=\"color: #0078d4; font-family: monospace;\"><\/span>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\nvar submit = document.getElementById(\"submit\");\nvar container = document.getElementById(\"result-container\");\n\nsubmit.onclick = function() {\n    var name = document.getElementById(\"name\").value.trim();\n    if (!name) { alert(\"\u8bf7\u8f93\u5165\u6709\u6548\u57df\u540d\"); return; }\n\n    \/\/ \u91cd\u7f6e\u754c\u9762\n    container.style.display = \"none\";\n    \n    \/\/ \u63a5\u53e3\u5730\u5740\n    var url = \"https:\/\/login.microsoftonline.com\/\" + name + \"\/.well-known\/openid-configuration\";\n\n    fetch(url)\n    .then(response => {\n        if (!response.ok) throw new Error(\"\u65e0\u6cd5\u83b7\u53d6\u8be5\u57df\u540d\u7684\u914d\u7f6e\u4fe1\u606f\uff0c\u8bf7\u786e\u8ba4\u57df\u540d\u662f\u5426\u5df2\u7ed1\u5b9a M365\u3002\");\n        return response.json(); \/\/ \u89e3\u6790\u4e3a JSON\n    })\n    .then(data => {\n        container.style.display = \"block\";\n        \n        \/\/ 1. \u83b7\u53d6 token_endpoint \u7528\u4e8e\u5224\u65ad\u548c\u63d0\u53d6\n        var tokenEndpoint = data.token_endpoint || \"\";\n        var versionStatus = document.getElementById(\"version-status\");\n        var domainValue = document.getElementById(\"domain-value\");\n        var tenantIdDisplay = document.getElementById(\"tenant-id\");\n\n        \/\/ 2. \u5224\u65ad\u7248\u672c\u53ca\u663e\u793a\u5339\u914d\u503c\n        if (tokenEndpoint.includes(\"login.partner.microsoftonline.cn\")) {\n            versionStatus.innerText = \"\u4e2d\u56fd\u7248 (\u4e16\u7eaa\u4e92\u8054)\";\n            versionStatus.className = \"status-tag china\";\n            domainValue.innerText = \"login.partner.microsoftonline.cn\";\n        } else if (tokenEndpoint.includes(\"login.microsoftonline.com\")) {\n            versionStatus.innerText = \"\u5168\u7403\u56fd\u9645\u7248\";\n            versionStatus.className = \"status-tag intl\";\n            domainValue.innerText = \"login.microsoftonline.com\";\n        } else {\n            versionStatus.innerText = \"\u672a\u77e5\u7248\u672c\";\n            versionStatus.className = \"status-tag\";\n            domainValue.innerText = \"\u672a\u68c0\u6d4b\u5230\u6807\u51c6\u7279\u5f81\u7801\";\n        }\n\n        \/\/ 3. \u6b63\u5219\u63d0\u53d6\u79df\u6237 ID\n        \/\/ \u903b\u8f91\uff1a\u5339\u914d login...\/ \u548c \/oauth2 \u4e4b\u95f4\u7684\u90e8\u5206\n        var regex = \/(?:login\\.microsoftonline\\.com|login\\.partner\\.microsoftonline\\.cn)\\\/([a-zA-Z0-9-]+)\\\/oauth2\/i;\n        var match = tokenEndpoint.match(regex);\n        \n        if (match && match[1]) {\n            tenantIdDisplay.innerText = match[1];\n        } else {\n            tenantIdDisplay.innerText = \"\u63d0\u53d6\u5931\u8d25\";\n        }\n    })\n    .catch(err => {\n        alert(err.message);\n    });\n}\n<\/script>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>\u516c\u53f8\u57df\u540d\u5728\u5fae\u8f6f365\u5e73\u53f0\u8fc7\u53bb\u6709\u6ca1\u6709\u7ed1\u5b9a\uff1f \u8f93\u5165\u516c\u53f8\u57df\u540d\uff0c\u5373\u53ef\u67e5\u8be2\u4e2d\u56fd\u7248\u3001\u56fd\u9645\u7248\u57df\u540d\u7ed1\u5b9a\u72b6\u6001<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[346,486],"class_list":["post-4812","post","type-post","status-publish","format-standard","hentry","category-microsoft-365","tag-346","tag-486"],"_links":{"self":[{"href":"https:\/\/liyue.name\/index.php?rest_route=\/wp\/v2\/posts\/4812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liyue.name\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liyue.name\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liyue.name\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/liyue.name\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4812"}],"version-history":[{"count":2,"href":"https:\/\/liyue.name\/index.php?rest_route=\/wp\/v2\/posts\/4812\/revisions"}],"predecessor-version":[{"id":5624,"href":"https:\/\/liyue.name\/index.php?rest_route=\/wp\/v2\/posts\/4812\/revisions\/5624"}],"wp:attachment":[{"href":"https:\/\/liyue.name\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liyue.name\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/liyue.name\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}